我觉得,这个题目问得不是很贴切,从而也引来了delphilai那样的回答,谁都知道作为VCL的一部分的窗体类是面向对象的,但我们这里讨论的是对数据的抽象!
而当我们用TDatSet, TDataSource, TField来构造我们的程序的时候, 也是面向对象的,绝对面向对象!只是抽象程度与架构好坏值得探讨。对,这种架构对数据的抽象的程度(注意这里,说的是对数据的抽象!),并没有达到我们需要的是抽象程度。我们需要的是,抽像出来的类尽可能的接近现实中的对象。打个比方,一个订单类(TOrder),它有自己独有的属性和方法,它表示和处理与且只与订单相关的一切。
^ ^(注意!)
然后我们的UI部分的代码访问这个TOrder的实例或集合打交道的时候,就像(起码是尽可能的接近)实现中对订单的操作一样。
要实现这种架构,引发的问题主要是O/R Mapping和对像的保存,现在流行的架构是做一个object persistence layer(对象持久框架)与DB隔开。与在delphi环境下,borland通过delphi 7 architecture版提供了bold,这是一个很优秀的framework,同时提供了类似data aware controls的bold aware controls,也就解决了对象显示的快速解决方案。
ww20000309介绍的pdf文档值得一读,很多object persistence layer都参考这个白皮书。
另外还有一个建议,是论坛上另一位网友提出的(忘记了名字,不好意思)。因为对支持数据库程序的开发,delphi开始主要的目的是RAD,而TDataSet-TField-TdataSource就是实现RAD的主要部件,一直以来,整个delphi community都盛行这种架构,而开发者靠着对OOP/OOD慢慢的觉悟,想跳出这种框架,就自己写框架(也许称不上框架),但要设计出优秀的框架,谈何容易!像本贴这样的问题可能就是在这种觉悟过程中提出的,我想。但如果我们跳出delphi看看,就会发现其实世界上还有J2ee,JDO这样优秀的技术!学习了它们,再回头看看这个问题,你就会再清晰不过了!话说回来,其实delphi的bold也是很优秀的框架,最主要是它用我们同时拥有OO(注意!这里说的是对数据的尽可能接近现实的抽象!)与RAD!但可惜的是它资料不多,所以我才建议大家同时学习java中的思想。