随便说说最近项目中的三层架构吧。讲点实际的东西。我最讨厌空讲道理。网上讲道理的太多了,不喜欢举例子。
大多数文章中都或多或少的讲到了三层架构。表示层,业务层,数据层。又把业务层再细分,分为外观服务层,主业务服务,及数据库库服务层。
今天主要讨论一下业务层吧。举个最简单的例子。客户端获取数据。
业务层要与表示层尽量解藕, 我的方法是:首先我们在中间层TLB_中定义一个接口 IBusinessService, 定义一个方法。getvoList,我要得到一个VO的列表, VO即ValueObject, 例如:TValueObject= class(TPersistent)
private
b_insertFlag :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);
function 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 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)
private
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: TValueObject; 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;
public
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 setValueObject;
end;
TValueObjectList就是VO的装载器。在 JAVA中有一个好听的叫法,
VOList值列表组装器,具体的功能是可以管理VO, 当然你可以进行扩充,比如后来我加入了OLE<->TOBJECT<->TDataset互换的功能。
主键生成机制,分页存取功能,生成子集功能,及懒装载功能,压缩传输流功能等,同步数据更新问题等。这要你自己去发挥吧。
大多数文章中都或多或少的讲到了三层架构。表示层,业务层,数据层。又把业务层再细分,分为外观服务层,主业务服务,及数据库库服务层。
今天主要讨论一下业务层吧。举个最简单的例子。客户端获取数据。
业务层要与表示层尽量解藕, 我的方法是:首先我们在中间层TLB_中定义一个接口 IBusinessService, 定义一个方法。getvoList,我要得到一个VO的列表, VO即ValueObject, 例如:TValueObject= class(TPersistent)
private
b_insertFlag :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);
function 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 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)
private
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: TValueObject; 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;
public
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 setValueObject;
end;
TValueObjectList就是VO的装载器。在 JAVA中有一个好听的叫法,
VOList值列表组装器,具体的功能是可以管理VO, 当然你可以进行扩充,比如后来我加入了OLE<->TOBJECT<->TDataset互换的功能。
主键生成机制,分页存取功能,生成子集功能,及懒装载功能,压缩传输流功能等,同步数据更新问题等。这要你自己去发挥吧。
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货