随便说说最近项目中的三层架构吧。讲点实际的东西。我最讨厌空讲道理。网上讲道理的太多了,不喜欢举例子。
     大多数文章中都或多或少的讲到了三层架构。表示层,业务层,数据层。又把业务层再细分,分为外观服务层,主业务服务,及数据库库服务层。
    今天主要讨论一下业务层吧。举个最简单的例子。客户端获取数据。
    业务层要与表示层尽量解藕, 我的方法是:首先我们在中间层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互换的功能。
主键生成机制,分页存取功能,生成子集功能,及懒装载功能,压缩传输流功能等,同步数据更新问题等。这要你自己去发挥吧。