DELPHI三层架构设计方案.doc

上传人:cn****1 文档编号:552849979 上传时间:2023-08-22 格式:DOC 页数:6 大小:36.50KB
返回 下载 相关 举报
DELPHI三层架构设计方案.doc_第1页
第1页 / 共6页
DELPHI三层架构设计方案.doc_第2页
第2页 / 共6页
DELPHI三层架构设计方案.doc_第3页
第3页 / 共6页
DELPHI三层架构设计方案.doc_第4页
第4页 / 共6页
DELPHI三层架构设计方案.doc_第5页
第5页 / 共6页
点击查看更多>>
资源描述

《DELPHI三层架构设计方案.doc》由会员分享,可在线阅读,更多相关《DELPHI三层架构设计方案.doc(6页珍藏版)》请在金锄头文库上搜索。

1、 随便说说最近项目中的三层架构吧。讲点实际的东西。我最讨厌空讲道理。网上讲道理的太多了,不喜欢举例子。 大多数文章中都或多或少的讲到了三层架构。表示层,业务层,数据层。又把业务层再细分,分为外观服务层,主业务服务,及数据库库服务层。 今天主要讨论一下业务层吧。举个最简单的例子。客户端获取数据。 业务层要与表示层尽量解藕, 我的方法是:首先我们在中间层TLB_中定义一个接口 IBusinessService, 定义一个方法。getvoList,我要得到一个VO的列表, VO即ValueObject, 例如:TValueObject= class(TPersistent) private b_in

2、sertFlag :Boolean; b_updateFlag :Boolean; b_deleteFlag :Boolean; d_rowVersion :double; procedure setInsertFlag(pInsertFlag :Boolean); function getInsertFlag: Boolean; procedure setUpdateFlag(pUpdateFlag :Boolean); function getUpdateFlag: Boolean; procedure setDeleteFlag(pDeleteFlag :Boolean); functi

3、on getDeleteFlag: Boolean; procedure setRowVersion(pRowVersion :double); function getRowVersion:double; protected function GetOLEData: OleVariant; virtual; procedure SetOLEData(const Value: OleVariant); virtual; published property bInsertFlag: Boolean read getInsertFlag write setInsertFlag; property

4、 bUpdateFlag: Boolean read getUpdateFlag write setUpdateFlag; property bDeleteFlag: Boolean read getDeleteFlag write setDeleteFlag; property dRowVersion: double read getRowVersion write setRowVersion; property POLEData:OleVariant read GetOLEData write SetOLEData; end;TUserVO = class(TValueObject) pr

5、ivate id: string; name: string; password: string; 。 VO的列表:TValueObjectList = Class(TObjectList) private ValueObject: TValueObject; ClassName: TClass; procedure setClassName(pTmpClsName :TClass); function getClassName: TClass; procedure setValueObject(pTmpVO :TValueObject); function getValueObject: T

6、ValueObject; protected function GetOLEData: OleVariant; virtual; procedure SetOLEData(const Value: OleVariant); virtual; published function AddItem(index: integer; AObject: TObject ):Integer; virtual; function GetItem(index, itemid: integer ): TObject; virtual; function CountItem:Integer; virtual; p

7、ublic constructor Create; virtual; destructor Destroy; override; procedure AfterConstruction; override; property PClassName: TClass read getClassName write setClassName; property POLEData: OleVariant read GetOLEData write SetOLEData; property PValueObject: TValueObject read getValueObject write setV

8、alueObject; end;TValueObjectList就是VO的装载器。在 JAVA中有一个好听的叫法,VOList值列表组装器,具体的功能是可以管理VO, 当然你可以进行扩充,比如后来我加入了OLETOBJECTTDataset互换的功能。主键生成机制,分页存取功能,生成子集功能,及懒装载功能,压缩传输流功能等,同步数据更新问题等。这要你自己去发挥吧。 说了这么多,话题转回来吧。现在说客户端怎么去存取数据。在前面中间层已经定义了IBusinessService, 定义一个方法。getvoList,这个就是通用存取数据的接口了。 下面看看他的完整形式: procedure getvo

9、List(const sBOName: WideString; const sBOService: WideString; out voListObj: OleVariant); 这里有三个参数,sBOName:sBOService:voListObj: 干什么用的?第一个就是业务对象名称, 第二个是业务对象服务名称,第三个是传回来的olevariant; 强调一点。sBOName:sBOService:这两个参数并不直接对应中间层的业务对象。之间加了一个转换层。也就是service定位层。这个东西把客户传来的两个参数定位到相应的业务对象中。有什么好处呢。其实就相当于客户端和中间层的一个简单的

10、协议,客户端发一个boname,一个服务名,这都是约定的。也就是不变的。以后该业务要变,就十分方便,只需要在中间层的定位器,配置一下就可以了,如果采用XML或文件配置,不需要修改任何程序,客户的业务已经发生改变。当然会采用名字调用等技术了。相关代码如下: TBOService= class(TServiceObject) private /srvOBName : String; IBasBO: IBaseBO; BOPool: TBOPrototype; /业务对象持久池: public constructor Create; procedure getvoList(const sBOName

11、: WideString; const sBOService: WideString; out voListObj: OleVariant); safecall; 。 再说说TBOPrototype吧 ,这个东西是管理业务对象池的。由他统一创建业务对象。采用的是单例模式。 之后具体的调用,相关代码如下: if FindClass(fClsPer.ClassName) nil then begin tmpPer := TPersistentClass(FindClass(fClsPer.ClassName).Create; Supports(tmpPer, StringToGUID(3AE5EA

12、91-41EA-41E7-B40C-CF00F8B75F8A), IBasBO); try IBasBO.InitBusinessObj; voListObj := IBasBO.GetDAOValueObject.getDAOValueList; finally IBasBO := nil; end; end else ShowMessage(no found!);其中IBasBO,是一个接口定义,IBaseBO = interface(IUnknown) 3AE5EA91-41EA-41E7-B40C-CF00F8B75F8A function GetObject: TObject; pr

13、ocedure SetObject( value: TObject ); function GetDAOValueObject: TDAOValueObject; procedure SetDAOValueObject(tmpDAOVO: TDAOValueObject); procedure InitBusinessObj; end;呵呵,现在可以看到冰山一角了吧。 经过业务对象初始化之后,他就去创建DAO了。呵呵。 如果你不了解DAO,看看相关的资料吧。 主要功能就是把数据存储隐藏起来,调用SQL, ORACLE,之类。我主要是用它调用数据库工厂创建。 大致看一下代码吧。 /-/1.工厂基类(SQLServer工厂类)/-unit ConnDBFactory_SQLServer;interfaceuses Classes, ADODB, ConnDB, DB, DBTables, Controls, Dialogs, IConnDB, ConnDBFactory;type TConnBDEDBF

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 生活休闲 > 科普知识

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号