落魄青年,挨踢民工,已经转行
分类:
2007-10-19 15:19:42
潜在的缺陷
计划丢掉一个—原型的重要性
对象和对象之间的交互是个很棘手的东西.如果你第一次或者做了几次没有成功,不要气馁.做一个用来验证的原型是很重要的,有时候我们纸上谈兵一点问题都没有,到了实际未必能正常运行.计划为你的业务对象写一个原型吧,然后扔掉它.你的第一原型将会给你提出很多要解决的问题.
业务对象设计
基本上,在RAD开发中,设计就是写代码.严格地面向对象开发要有分析和设计阶段.没有经过良好设计的对象继承层次将会十分难用,搞乱人的思维并最终被丢掉了事.在开始编码之前请花点时间来设计你的类吧.
寻求帮助—业务对象开发是一门艺术,不是一门科学
面向对象编程同过程式编程不是同一种技能,它要求不同类型的方法和设计思路.对过程式程序熟悉的程序员不是那么容易转换过来的,更加不可能突然学会.寻求帮助吧,这些帮助可能来源于大师们的方法论述,来源一些专业杂志,来源于一些专家的讨论会.
为重用而建,但没有人重用
我发现刚开始带领我们的团队进入面向对象领域时,我们有很多的玩笑是关于怎样写可重用对象的(他们没想怎样重用别人的东西).人们必须给那些开发可重用对象的作者付给报酬.那些专业组件写作者的作品可以被别人派生后作为自己的业务对象,其质量远远好过不专业的人随手涂鸦的东西,这些人应该得到尊重.组件开发者需要人们购买他们的东西,并且要实际使用组件.
业务对象开发是为长期而准备的
开发和使用业务对象在初期并不会节省你任何时间,但它们会产生长久的效果.直到你积累了相当多的业务对象后,你才会从业务对象中获得好处.
结论
对于我们各种不同的任务,Borland公司一贯地提供我们需要的工具.它让我们有可能更容易写分布式的业务对象.如果你想开发具有灵活性和伸缩性的企业级系统,在开发过程中,所有的物理的,逻辑的多层体系都应该考虑一下作为你的应用程序体系的选择.
建议读物
Booch, Grady. Object-Oriented Analysis and Design with Applications, 2nd ed. (Addison-Wesley, 1994).
Booch, Grady. Object Solutions:Managing the Object-Oriented Project, (Addison-Wesley, 1995)
Fowler, Martin. Analysis Patterns: Reusable Object Models, (Addison-Wesley, 1996)
Gamma, Erich, Richard Helm, Ralph Johnson, John Vlissides. Design Patterns: Elements of Reusable Object-Oriented Software,
(Addison-Wesley,1995)
译后记:
这篇文章是在大富翁上一个问题的解答中()找到的,部分代码缺乏,所有的图片都没有,本身原始来源应该是(from Carl Hewitt’s paper “Developing and Deploying Business Objects in Delphi”, http:// www. oop. com/ white papers).这个网站现在上不了.这个老外的母语好像也不是英文,句子太长,我的英文也烂,翻译得磕磕碰碰的,最明显的是在关于OnValidate事件的描述那部分.
这篇文章给我们还是带来了一些启示,虽然有时候我很想看他的业务对象的例子,这个时候他又说不想陷入细节,又说时间和空间不允许等等.尽管如此,我还是能得到收获.
TdataModule只是Borland给开发者的一个提示,其实你完全可以用正常的Form来作为你的DataModule,关键是要有把界面和业务逻辑在某种程度上分开的考虑.简单地说,就是要多用Tdatamodule,一个程序可以用很多个,即使一个窗体对应一个也不是不可以.能够写在Datamodule中的方法不要写在界面窗体中.能够写在DataSet中的事件,不要写在dbedit,dbgrid中,如果你哪天要换更酷点的控件不是要重写事件?在Dataset中就不会.还有可以把一些过程封装在Datamodule中,不要在Form1中写一大段的话,就是为了取某个数,不停地说DM1.DATASET1.xxx,DM1.DATASET2.xxx… 其实可以做一个函数作为DataModule的对象方法,给Form1调用得到返回值就好了.这样做违背了面向对象一个原则:不要和陌生人说话,DM1对Form1来说,是被使用的对象,是熟人没问题,DataSet1,DataSet2对Form1来说,就是陌生人.有时返回值也可以用dataset的指针(Delphi中比较少用显式指针,但是对象引用都是隐式指针)来传递,不过要注意正确地create和Free.
另外Delphi中的业务对象基本还是体现在DataSet中,表模式驱动呗.业务逻辑也主要放在DataSet的事件中.想用纯的面向对象,还是用java吧.
我个人觉得,用表模式配合Delphi的BDE数据访问,特别是用Tquey和TUpdateSQL,更新数据十分方便,不像vf和pb,vb,哪些数据更新了,如何更新的,还要用循环语句自己去判断,在这里Query全部给你做好了,你只要在onupdaterecord中写事件就好了,管你是不是join的表,管你要不要同步更新库存和会计凭证,全部解决.最新的ADO.NET还可以做得更好.