fatspider
29304
|
2007/5/8 15:43:39 |
学习一下。 |
jhwh
9789
|
2004/11/23 20:58:08 |
这样设计的出发点有问题。用继承的方式,需要做的工作太多了。如果子类不通过大量的修改,想做到一次编写是完全不可能的。更有甚者,一个小的修改,继承来的子类也完全得重写。 |
dinkysoft
9724
|
2004/11/22 13:56:44 |
sephil,举个例子来看看。不知道有没有用过 |
hotyei
9721
|
2004/11/22 13:33:59 |
以前试过 InstanctObject ,看过它的 Demo, 它自己会处理数据的保存,不过这样保存的数据感觉不好维护。或许是我未深入。 |
sephil
9719
|
2004/11/22 12:32:04 |
不知道你们用过InstanctObject没 感觉很好 |
dinkysoft
9717
|
2004/11/22 10:55:40 |
看错了。 dinkysoft 9716 2004-11-22 10:53:52 Mr Phil Brown是将数据库字段映射成对象,更好的面向对象编程。MS.NET的C# DEMO(petshop)也有Mr Phil Brown 的方法。
也就说错了
|
dinkysoft
9716
|
2004/11/22 10:53:52 |
Mr Phil Brown是将数据库字段映射成对象,更好的面向对象编程。MS.NET的C# DEMO(petshop)也有Mr Phil Brown 的方法。 |
windlian
9715
|
2004/11/22 10:33:23 |
参考:Mr Phil Brown http://www.howtodothings.com/showarticle.asp?article=159 Mr Phil Brown 是用List存放从数据库中读取的数据,List里面包含Object,每一个Object就是一个数据记录 感觉这种方式不错,但是对象开销随数据库记录多少而增长,速度可能是给问题。而且我们的习惯都是用DBGrid显示数据。 |
windlian
9714
|
2004/11/22 10:26:35 |
还有三个BaseForm。 BaseDetailForm, 详细资料界面 BaseFindForm, 资料查找界面 BaseGridForm, 用DBGrid显示的界面 覆盖各个BaseForm的方法就可以。 |
windlian
9713
|
2004/11/22 10:23:22 |
使用方法简述,参照uCard: 1.TCard继承于TDataObject,手工进行数据库的映射-字段对应Field。 FCardNo - cd_No, FStatus - cd_Status 并覆盖IsValid方法,这个是判断数据是否合法。 2.TCardDOO继承于TClientDataSetDOO, (TClientDataSetDOO->TDataBaseDOO->TDataOperateObject->TObject TDataOperateObject是虚基类,封装了对数据操作的一些方法,也可以用接口实现 TDataBaseDOO是通过Delphi内的各种数据库对象如Table, Query实现数据操作 TClientDataSetDOO是用ClientDataSet实现数据操作。)
覆盖以下方法: DoEditRecord, DoInsertRecord,DoGetDataObject,Create,AssignRecord 这里是使用了Template模式
|
dinkysoft
9706
|
2004/11/22 8:55:02 |
shaoyy,我不觉得实现麻烦(可能是我没有认真看)。 能说说你对象持久支持层吗?:) |
windlian
9703
|
2004/11/22 8:51:43 |
to shaoyy: 要直接映射数据库难啊,水平不够唯有将就,呵! |
dinkysoft
9702
|
2004/11/22 8:50:58 |
《Delphi模式编程》看来又是一本好书了。看来又要出血了。不过好书不多。不可以错过。谢谢楼主推荐。 |
shaoyy
9701
|
2004/11/22 8:45:59 |
good! 不过这种数据持久层设计虽然清晰,但是实际应用还是太麻烦,我在自己的系统里实现了"通用对象持久层",即所有的对象共用一个Persistent Object,前提是我的业务对象的底层实现了"对象持久支持层",主要向子类开放了两个方法:GenerateLoadSQL 和 GenerateSaveSQL,有点像fastreport 中的每个View都有SaveToStream 和 LoadFromStream,然后Report的SaveFromStream 就很简单了。当然如果子类不实现GerateLoadSQL方法,仍然可以采用楼主的方法来实现。 |
windlian
9698
|
2004/11/22 8:23:49 |
呵,是抄《Delphi模式编程》 |
dinkysoft
9697
|
2004/11/22 8:18:40 |
惨了,乱码!改不了。 楼主,有学习的QQ不 |
dinkysoft
9696
|
2004/11/22 8:16:19 |
class function TdmData.AccessInstance(Request: Integer): TdmData; const FInstance: TdmData = nil; begin { 0: ²»×öÈκδ¦Àí£¬·µ»ØÊµÀý¡£ 1£º Èç¹ûʵÀýδ´´½¨Ôò´´½¨Ö®£¬·ñÔò·µ»ØÊµÀý¡£ 2£º Êͷŵ±Ç°ÊµÀý£¬Ê¹Finstance:= nil } case Request of 0: ; 1: if not Assigned(FInstance) then begin FInstance:= CreateInstance(nil); end; 2: FInstance:= nil; else raise Exception.Create('Cannot Access This Instance!'); end; Result:= FInstance; end; 这里是用了Singleton Design Pattern么。呵呵。
不错。学习,学习!(想此源码不适合初学者!:(。乱说的我也是初学者) |