论坛首页 Java企业应用论坛

基于domain object进行OOAD设计

浏览 18828 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2007-02-15  
buaawhl 写道
OO编程的技术是一门代理的艺术。职责划分明确,把接口定义好,把实现交给另外的类来做。著名的Proxy, Delegate模式就是这样。
首先把变化的部分和不变的部分 划分出来。不变的部分,就成了框架。变化的部分,就是程序员自己做。
可是我自己不想做,我希望框架帮我把变化的部分也做好。怎么办呢?
这就要用到代理的艺术。把要做的事情定义好,然后把具体的工作交给别人做,这样自己就不用作了。这种方式是最灵活的。


我觉得你跑题了, 楼主想要的是 :
1.数据库表增加一个字段(不涉及到复杂逻辑),不要重编译代码
2.当你在一个域对象中增加或减少或改变对其他域对象的引用,不要重编译代码
本质上这两个问题是一致的。
  这能通过配置文件时实现,首先需要抛弃VO或纯数据的域对象观念(这是违背面向对象设计的原则,对象应
  封装数据和操作),然后去思考域对象之间引用的本质是什么。


0 请登录后投票
   发表时间:2007-02-15  
用一个表来定义另外一个表的结构,应该可以实现。不过在java这种静态语言里因为没有像ruby一样的meta programming能力,所以用起来会比较烦。
0 请登录后投票
   发表时间:2007-02-15  
这还是设计的问题,对一个对象的可变性分析不足,如果认为是一个经常发生变化的对象,就应该考虑对象的重新设计。比如桌子这个对象,可以把高度、颜色、材料做为属性,随着时间的推移,又发现属性比想象的复杂,完全可以把这属性提取出来,形成桌子-->桌子的属性---->属性,这样三个对象,可以任意的扩展。
是否要这样设计,取决于对事物的抽象程度、系统的复杂度等情况的考虑。结构的复杂度和可扩展性总是成正比。并不是越灵活越好,就象走钢丝一样,是需要平衡的。
0 请登录后投票
   发表时间:2007-02-15  
lgx522 写道
这篇文章其实无意中点了OOAD的一个死穴。
笔者转向Java Web编程前从事的是传统的Delphi C/S编程。转过来后就觉得J2EE分层太多,每到更改,每层几乎都要涉及,相当麻烦且易出错。在Java Web之余,又涉及了一些ASP、PHP之类的东西,才发觉Web编程也可如此简单,不禁对J2EE产生了很大的疑问:本来可以简单实现的东西,何必搞得那么复杂?
近两年OO水平上涨后才逐渐领会到其中玄机。OO与分层就重要的好处其实业务逻辑的复用!OOAD将数据存储、业务逻辑、表示层分离,就可以适应多种数据存储方式与表示层技术的变化。比方说,你就可以选用多种数据库、XML甚至文本!也可以选择WEB、Rich Client以至于手机、PDA。当存储层与表示层变化时,业务层几乎可以保持不变。原因其实也简单:传统的过程式编程是把他们在一块写,而OO则是分开来写。而天下事总是利弊相当,OOAD的高适应性也就必然为其带来高度的复杂与费时,甚至修改时的麻烦。综上所述,OOP其实是便于扩展而不适于修改。原因简单之极,写在一起的改起来只需改一处,分开写的改起来则要改每一处。
所以是否采用OOAD,要因软件产品的定位而论。如果考虑的是扩展性,业务逻辑相对固定,而存储层、表示层变化多的情况下,OOAD当是不二之选;而存储层、表示层相对固定,业务逻辑变化大的情况下,则应选用过程式编程。如果二者变化程度均衡,则可采用MS骑墙式的方法。笔者这番大胆言论其实并非由理论推导而来,而缘于对当今软件界的实际观察。真正的企业级开发无疑J2EE是主导,这符合第一种情况;而变化迅速的互联网界则以PHP为王,小型桌面系统至今仍以VB、PB、Delphi为佳;而中型系统,无疑以.NET发展得最好。


我开始时也是使用过程式语言的,所以过程中也有过类似的感受。
但是随着接触到各种不同业务领域的系统,我发现这些和OOAD等思想没有关系,而是实际系统自己的缺点,也就是实际项目中技术组合出现的问题造成的,即开发人员自己没有能够理解各种技术的特点。每个人都有自己的特点,你说是优点或者是缺点都是不对的,技术也是这样,根本没有优缺点,只有特点。
简单的例子,男人不能怀孕(一般而言,我没有查是否有男性怀孕的具体案例),你是否能说“不能怀孕”是男人的缺点,然后列出如下的内容,作为你的ppt的内容?
------------------
男性:
pros: N/A
cons: 不能怀孕
女性:
pros: 能怀孕
cons: N/A
------------------
:wink:

OOAD的思想其实和web页面链接的思想类似,从表达方式可以看出来:
JAVA:Properties.Settings.Default.myColor
C#:Properties.Settings.Default.myColor
URI:http://www.iteye.com/topics/quote?post=222485
虽然大家讨论OOAD很多年了,但我觉得OOAD就是这个东西。

另外,对于最后以系统规模来简单对应选择的语言平台我认为是非常不恰当的。我认为以应用领域与层次划分方式进行对应更加合理些。 
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics