论坛首页 Java企业应用论坛

Domain Model 探索

浏览 104085 次
该帖已经被评为精华帖
作者 正文
   发表时间:2004-12-30  
partech 写道
唉,老兄,不知道是我没有描述清楚,还是你没理解
都说了Act在于封装业务活动,属于业务层的控制类。
它是独立于具体应用层而存在的。它执行业务的行为怎么可以
放到实现应用层接口的服务层中呢?
再不明白,真的是服了you。


我怎么看这些ACTs就象一个一个过程(只不过加了点回调),那算什么面向对象啊
0 请登录后投票
   发表时间:2004-12-30  
引用

执行业务的行为

这个行为不是有业务主体来完成阿,为什么要把它拿出来?看见了一堆数据和很贫血的方法,然后去要这个act再去操作它? openService -->openAct->step1,step2,step3...?为什么不是openSercie openMehtod (1,2,3)? 实在看出去act的必要!one method one class 是为了什么?完全是过程化的思想
0 请登录后投票
   发表时间:2004-12-30  
你说的没错。Act之所以是一个个过程是因为这样一个事实,
各种业务本来就是一个个过程。
Command模式本来就是如此,都只有一个Run方法。
建议去看看Bob大叔的《敏捷软件开发》中的有关Command的
相关阐述。
0 请登录后投票
   发表时间:2004-12-30  
Command模式是不错,问题是为什么要用,在什么场合下用,我承认业务是一个过程:开户;它描述的对象是“户“这个名词,他有自己的属性 由开户这个动作,我为什么不能操作自己的属性去做事情的,每动一下非得请个act大叔来做?累不累阿?
0 请登录后投票
   发表时间:2004-12-30  
partech 写道
你说的没错。Act之所以是一个个过程是因为这样一个事实,
各种业务本来就是一个个过程。
Command模式本来就是如此,都只有一个Run方法。
建议去看看Bob大叔的《敏捷软件开发》中的有关Command的
相关阐述。

我晕,Command模式被用来帮这种事了,这不是绕了个大圈做过程,哪有面象对象的好处啊,那还不如直接用一个个过程来得直观,比如AccountHelper.xxx。
举个例子:一个系统有很多种类Order对象,以Order为基类,Order类有一个确认定单动作Order.confirm()。不同子类的订单会执行不同的动作,比如是供应商Order就会发直接生成发货单对象及xxx,是个人用户Order就会yyy等等。按你的方法用Act,是不是要在act中来一堆if来判是什么Order再用作什么处理?还是有一堆Act,比如供应商OrderACT,个人用户OrderACT等等。把而用对象法就可以在查询得到一堆Order后(Hibernate不是可以多态查询吗),直接order.comfirm()就ok了,具体动作由order自已处理,这是多态的好处,比用回调好多了吧。
0 请登录后投票
   发表时间:2004-12-30  
如果子类中的order.confirm(),需要知道当前的业务类别或当前正在执行该项操作的员工。
你如何得到?

Act的主要目的是提供当前业务运行的上下文。同时完成操作多个业务对象的任务,因为该
操作需要跨越多个对象,这样该方法放入那个对象都不合适。
0 请登录后投票
   发表时间:2004-12-30  
partech 写道
如果子类中的order.confirm(),需要知道当前的业务类别或当前正在执行该项操作的员工。
你如何得到?

Act的主要目的是提供当前业务运行的上下文。同时完成操作多个业务对象的任务,因为该
操作需要跨越多个对象,这样该方法放入那个对象都不合适。


这看程序需要啊,设计业务类和设计别的应用程序的类(比如文本编辑器)没什么不同啊,也可以在类上应用多态继承策略等,而不是做很多act。当前业务类别不是当前类嘛,操作的员工么要不是有个全局的当前操作者(放在session或是一个类的TheadLocal中),要不就成一个参数传入confirm。
0 请登录后投票
   发表时间:2004-12-30  
towjzhou 写道

当前业务类别不是当前类嘛。

同样一个存钱Act我可以存定期,也可以存活期,两种业务类别。
按照你的说法。不是要弄两个类?

towjzhou 写道

操作的员工么要不是有个全局的当前操作者(放在session或是一个类的TheadLocal中)

你设计的Session中会包含getEmployee()这样的方法吗?
这样你的Session就不得不同业务层中的Party关联了。

towjzhou 写道

要不就成一个参数传入confirm。

前面讨论Facade时已经讨论过,这种做法不可行。
0 请登录后投票
   发表时间:2004-12-30  
引用

Act的主要目的是提供当前业务运行的上下文。同时完成操作多个业务对象的任务,因为该
操作需要跨越多个对象,这样该方法放入那个对象都不合适。
在DDD中也有这么个说法,但是完全可以由service层来实现,换个立场考虑问题:用户的角度,他要的是对某个service 对象操作,他说我要开户:呢就把open这个动作放到accountService里面,虽然open 可能操作多个对象,他仍探是开户阿:开汽车,不能说要东道方向盘,发动机,轮子,就要每一个都要一个acttion把,那些只是这个打对象车子的component.由车子来调用协调对象的关系。看离子
引用

class 车{
   开(){
    方向盘.trun();
          上下文。。。
            发动机.fire();
上下文。。。
          轮子.trun();
   }

  或者这样“:
 class 车{
   开(){   
上下文。。。
     开ACT.run()
   }
  开ACTAct :run(){
       轴承。run();
......
}
} 
这样一层层调下去?   

那一种更好?
0 请登录后投票
   发表时间:2004-12-30  
Act在于封装业务活动, 这个概念很重要,
通过act之间的关系,就构成了业务活动骨架。

但我觉得 只要把act理解成为一种 概念原型(Archetype)就可以了。没有必要做成Interface
或基类之类, 继承的耦合性太高了,实际也不方便。

建议看看color Uml 第1章,可能应该会有收获。
0 请登录后投票
论坛首页 Java企业应用版

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