三层结构的设计模式
2006-02-04 13:41:14 来源:WEB开发网核心提示:.一般简单的三层结构设计方式: Remote Data Module服务器 数据库Query组件DataSetPRovider组件客户端应用程序DCOM组件ClientDataSet组件 现在一般介绍三层结构大多数使用上面的数据模型进行讲解,通过DataSource组件连接ClientDataSet组件,三层结构的
.一般简单的三层结构设计方式:
上面是我们现在采用的三层结构模式,它不通过DataSetProvider组件来传递数据,而是通过Remote Data Module服务器所提供的Interface来进行数据的传递。这样就使得应用程序完全与数据库服务器没有任何关系,对整个系统的升级与维护都带来极大的好处。 对于集合数据,由于Interface的返回值可以是OLEVarient类型,因此我们可以创建ClientDataSet来进行集合数据的传递。 3.部分源程序 //函数1:创建ClientDataSet procedure CreateCds(const Ds: TDataSet; var Cds: TClientDataSet); var I: Integer; begin Cds := TClientDataSet.Create(nil); for I := 0 to Ds.FieldCount - 1 do begin with Cds.FieldDefs.AddFieldDef do begin Name := Ds.FieldDefs[I].Name; DataType := Ds.FieldDefs[I].DataType; if DataType = ftAutoInc then DataType := ftInteger; Size := Ds.FieldDefs[I].Size; end; end; Cds.CreateDataSet; end; //函数2:给ClientDataSet负值 procedure TransData(const Ds: TDataSet; var Cds: TClientDataSet); var I: Integer; begin if Ds.RecordCount > 0 then begin Ds.First; while not Ds.Eof do begin Cds.Insert; for I := 0 to Ds.FieldCount - 1 do Cds.FielDs[I].Value := Ds.FielDs[I].Value; Cds.Post; Ds.Next; end; end; end;
Remote Data Module服务器 |
数据库 |
Query组件 |
DataSetPRovider组件 |
客户端应用程序 |
DCOM组件 |
ClientDataSet组件 |
现在一般介绍三层结构大多数使用上面的数据模型进行讲解,通过DataSource组件连接ClientDataSet组件,然后通过数据感知控件连接DataSource组件,来进行对数据库数据的访问。这样就使得数据库服务器、应用服务器和应用程序之间的联系过于紧密,如果其中一个做了改动,其他的都要跟着改动,对于系统的升级与维护带来很多不便。
2.新的三层结构设计模式:
Remote Data Module服务器 |
数据库 |
Query组件 |
DataSetProvider组件 |
客户端应用程序 |
DCOM组件 |
ClientDataSet组件 |
上面是我们现在采用的三层结构模式,它不通过DataSetProvider组件来传递数据,而是通过Remote Data Module服务器所提供的Interface来进行数据的传递。这样就使得应用程序完全与数据库服务器没有任何关系,对整个系统的升级与维护都带来极大的好处。 对于集合数据,由于Interface的返回值可以是OLEVarient类型,因此我们可以创建ClientDataSet来进行集合数据的传递。 3.部分源程序 //函数1:创建ClientDataSet procedure CreateCds(const Ds: TDataSet; var Cds: TClientDataSet); var I: Integer; begin Cds := TClientDataSet.Create(nil); for I := 0 to Ds.FieldCount - 1 do begin with Cds.FieldDefs.AddFieldDef do begin Name := Ds.FieldDefs[I].Name; DataType := Ds.FieldDefs[I].DataType; if DataType = ftAutoInc then DataType := ftInteger; Size := Ds.FieldDefs[I].Size; end; end; Cds.CreateDataSet; end; //函数2:给ClientDataSet负值 procedure TransData(const Ds: TDataSet; var Cds: TClientDataSet); var I: Integer; begin if Ds.RecordCount > 0 then begin Ds.First; while not Ds.Eof do begin Cds.Insert; for I := 0 to Ds.FieldCount - 1 do Cds.FielDs[I].Value := Ds.FielDs[I].Value; Cds.Post; Ds.Next; end; end; end;
更多精彩
赞助商链接