转载:将面向对象进行到底...

A
一个Delphi Programmer的痛苦是很多的,特别是Delphi Database programmer,尽管Delphi被鼓吹为最佳的Database programming language--此话不假,但是我们的痛苦并没有因此而减少。
    任何一个曾经做过delphi databsae Application的Programmer都会有这样的痛苦:我们不得不为我们的application添加一个new feature,但是似乎却无从下手;我们的database structure结构改变了,所以我们不得不花大量的时间去修改我们的program,即使前者是小量的改动;我们要离开公司了,newbie来了,但是我们却无法清晰地告诉他(或她)我们程序的结构,甚至连我们自己也不明白了;又接到客户的电话了,我不得不修改界面,但是,似乎改动的地方超乎我的估计--糟糕,为什么这个button始终不变灰,终于在别人的代码里找到原因了;我们的程序已经不能修改了,它们快爆炸了;我们不得不重做--于是再一次的噩梦开始了。

    很羡慕Java programmer,他们是幸福的,至少他们获得幸福的机会远大于我们,他们可以拥抱J2EE,后者可以说强制性地要求他们的Program呈现良构。还有很多open source的工具在等着他们的选择(castor, jboss, enhydra等),这些工具也给他们提供了设计良构程序的机会。
    不用惊讶于二者之间的天壤之别,这是所有Delphi programmer应得的,除非我们从根本上改变。在众多的Delphi programmer中,他们了解database有时甚至超过了解Delphi本身,因为,几乎所有的Delphi programmer在进行database programming的时候,他们面向的是data,是record,Field, Primary Key, Index这些数据库概念,很可笑,在oop口号如此响亮的今天,我们却不得不面向数据。

 

B

   关于数据库的封装问题, 这实际上牵扯到一个效率问题, 在J2EE的框架中, 提出了真正面向对象的Session Bean与Entity Bean, 以及对应于此的许多工具, 比如像IBM的sanfrancisco工程,Castor等,他们的出现标志着O/R mapping技术的成熟与走向实用, 但是在Java中, 使用它们的话,效率是比较低下的(每一个Ejb Container可以承受高达几十万个的EJB,即使在这种情况下,效率也低下), 所以如果在Delphi中实现O/R Mapping的话,其效率问题一定是一个瓶颈。(关于O/R Mapping,可以参见http://www.thoughtinc.com/上面的cocobase); 另外一个实现的途径是面向对象的数据库(它就像O/R Mapping一样可以直接从数据库中Query一个对象, 或将对象流进数据库), 可是这个方面的应用非常生涩, 到目前为止, 它的应用还处在可以说是萌芽阶段,因为现有的关系数据库应用程式要转向面向对象的, 需要很大的成本, 其次就是关系型的数据库及其对应的产品非常成熟与丰富, 这也是面向对象数据库不足以流行的原因(参照http://www.odbmsfacts.com/object-database.htm以及面向对象的查询语言OQL--http://www.odmg.org/)。


附:
三层架构的状态问题
    这个问题的确比较让人头痛--在delphi的Midas情况下, 但是只要有了O/R Mapping存在的话, 它就可以解决了。 必须记住的是,是不可能从逻辑上避免无状态的, 所以有状态对象的存在是必然的,问题在于如何理清哪些对象应该是stateless, 哪些是statefull的。
客户属性定制问题
    不错,这是一个非常头痛的问题。如果将它转化进技术领域, 那么它就成了这样一个问题了--对象动态界面问题(所谓界面, 是指对象暴露给client的interface,比如在Delphi中的Public及Published部分, 或者是一个接口), 换句话说就是如何动态的决定一个对象的属性,在Martin fowler的《分析模式》中,有关于这个方面的详细论述,大家可以去参考一下, 在Delphi里面的实现思路就像TField这个类的定义一样, 在TField中, 给定了一个属性那就是Data Type, 另外就是Type Check,这些都可以被用来进行动态属性的设计。另外,楼上有个兄弟说得好, RTTI与Visitor的合作也有异曲同工之妙!

C一个例子
                                  见http://www.techinsite.com.au/ 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值