多層系統架構
本架構已經講解中間層請參照講義
<a href="http://www.cnblogs.com/dksoft/category/10146.html">http://www.cnblogs.com/dksoft/category/10146.html</a>
主題:<插件式>的中間層架構 第一節
主題:<插件式>的中間層架構 第二節 |DLL的Exception你如何處理?|不同宿主内如果接口抛出異常,怎麼處理
用戶端架構的解決方案可以參照
EXE BPL DLL Interface Package 解決方案
<a href="http://www.2ccc.com/article.asp?articleid=1903">http://www.2ccc.com/article.asp?articleid=1903</a>
來實作插件式的架構
概述
為了解少維護成本,開發成本,重複編寫代碼特編寫此架構。分為中間層架構,客戶層架構,插件式編寫各個子產品。
架構即一種平台,有了這個平台才有各個子產品,平台是子產品運作的前提,是以各個子產品必須遵守該平台内的制定規則才能在這個平台内更好的運作。本系統架構,就是要實作此功能。
中間層架構
中間層主架構,以EXE應用程式向用戶端提供服務, 各業務子產品 以DLL的形式向中間層提供服務。
<圖1>中間層架構
中間層接口
中間層架構提供一個接口(IFrameworkService)供各業務子產品使用
IFrameworkService = interface //架構提供接口
function GetFrameWorkInfo(ActionIndex: Integer; var Data, Msg: OleVariant): HResult;
end;
子產品接口
業務子產品必須提供兩個兩個接口,供中間層擷取資訊,進行業務邏輯處理。
IModelInfo = interface //子產品基本資訊接口
procedure GetModelInfo(var ModelInfo: OleVariant); stdcall;
(ModelInfo: OleVariant)必須儲存如下資訊以便子產品管理者擷取資訊
procedure TModelInfo.GetModelInfo(var ModelInfo: OleVariant);
var
hash: TdkHashTools;
begin
hash := TdkHashTools.Create();
hash['Name'] := '系統子產品';
hash['Code'] := 'SystemMgr';
hash['Version'] := 1.01;
hash['Programmer'] := '楊茂峰';
hash['CreateDate'] := '2004-11-12';
hash['ModifyDate'] := '2004-11-12';
hash['Notes'] := '';
hash.SaveToOleVariant(ModelInfo);
hash.Free;
end;
IModelService = interface //子產品操作接口
function Opeartor(ActionIndex: Integer; var Data, Msg: OleVariant): HResult; stdcall;
子產品輸出函數
各子產品(DLL)必須輸出三個函數
exports
GetModelInfo, GetModelService, SetFrameWorkService;
下面是三個函數的原形
function GetModelInfo: IModelInfo; //擷取子產品資訊接口
function GetModelService: IModelService; //擷取子產品服務接口
function SetFrameWorkService(AFrameworkService:
IFrameworkService): HResult; //傳入架構服務接口到子產品