在这样的构想下,我们来做一个demos,
我们来定义如下的被IMisDriver驱动的接口,加入现在能想到的简单的应用,我们要作的工作如下
- 定义被驱动的接口
- 撰写IMisDriver的一个实现,用它来驱动各个接口,IMisDriver通过调用TPluginLoader的获得接口实例.
- 撰写每个接口的实现,并生成多个bpl
- 用TPluginLoader来载入这些插件,
- 主程序,实例化一个TPluginLoader,然后取得IMisLoader的实例,运行它.
我们先来完成第一步
unit InterfaceDefine;
interface
uses DBClient, midasLib, Types, classes;
type
ITracer = interface
['{623B3A22-15CE-4555-B470-C3F4EBEE7EB4}']
procedure info( const msg: string );
procedure error( const msg: string );
procedure debug( const msg: string );
end;
ILogin = interface
['{082F9C02-B504-4417-ACEB-1C9E3410ADED}']
procedure login( const user, pwd: string );
function loginByCookie( const user, pwd: string ): string;
end;
IUserInfo = interface
['{4DE53541-6FC3-44C7-BA27-49B0827625F0}']
function information: TObject;
end;
IAuthentic = interface
['{0E4BCF53-D685-4AC8-9C38-614117E59365}']
procedure valid( const actionId: string );
procedure config;
end;
IDataService = interface
['{722CE946-1F59-4C67-A0EA-6655F1B1D961}']
procedure beginTrans;
procedure commitTrans;
procedure rollbackTrans;
function doSelectSql( const theSql: string ): TClientDataset;
function doSelectValue( const theSql: string ): string;
procedure doUpdateSql( const delta: string );
procedure doUpdateSqls( const deltas: TStringDynArray );
end;
IShortcutDispather = interface
['{A2C08C9E-5B56-4DC9-934B-323CAEC1FF49}']
function actionOf( const input: TShortCut ): string;
procedure config;
end;
IProcessData = interface
['{9368710D-7240-466A-8BCF-0D8B2FF0502D}']
function process( var theData: TClientDataSet );
end;
IActionManager = interface
['{0FEE643C-7610-4442-9EB7-5D21A433788A}']
function processerOf( action: string ): IProcessData;
end;
IView = interface( IProcessData )
['{5F0000F8-7A9D-4824-915C-20A95A7B01F4}']
procedure View( var theData: TClientDataSet );
end;
IReport = interface( IProcessData )
['{DD5A8AE6-37D9-4B9F-A2C9-9BEA9F217F90}']
procedure report( var theData: TClientDataSet );
end;
implementation
end.