[请教]事务脚本与领域模型的区别

mis98ZB 日电卓越软件科技(北京)有限公司 开发总监  2004-10-07 11:08:31
《企业应用构架模式》里第20页讲了一下事务脚本与领域模型的区别,但是本人驽钝,怎么也想不明白。
请大家指点一下。

根据他给出的两个sequence图,就我的理解,事务脚本就是由一个控制器来控制事务的执行,而领域模型则把流程控制分散到一个个领域对象中。
这样有什么好处呢?
...全文
1162 1 收藏 63
写回复
63 条回复
切换为时间正序
请发表友善的回复…
发表回复
hedonister 2005-06-14
好帖啊,mark
回复
DragonLancer 2005-05-11
又是一个大问题,学习。
回复
Richardhu 2005-05-11
高手说话总是很高深,但我认为能够解决问题的方法就是好方法,而且越简单越好,把问题分析的过于复杂说明你没有认清事务的本质,在解决类似使用PO还是OO,或者什么方法论上,都是不正确的,他们毕竟是种工具,我们不能说有了飞机,就应该否定或限制自行车。在特定条件下,自行车指定比飞机好。学习新的知识是必要的,但对已经存在的技术我们绝对要正确认识,加以利用,而且使用的地方比新的技术理论要多的多。
不过争论还是让我这个菜鸟学到了很多东西呀,^_^。
回复
ieooo 2005-05-10
学习
回复
zhaoliang_chen 2005-05-10
在哲学的范畴内 :联系是具有普遍性的
控制是什么? 假设你吃了一个很甜的葡萄,你能说你控制了它吗?
你还要受到它的影响,下次你看到葡萄你一定很想吃它,这就是它对你的影响。
这样看来所谓控制只是单向的联系。
世界上只有对象是客观存在的,而且正是他们的相互作用相互影响才有了业务流程
程序中的”控制“是机械的不是智能的 是受到了其他对象的影响而作出的反应
从这个角度我们不可以将它称为“控制者”
而“协调”是说对象之间的自适应能力,也就是说对象的反映能力
回复
小谁家老谁 2004-12-06
学习
回复
mis98ZB 2004-11-21
我认为,面向对象中是没有“控制者”的角色的,但是“协调者”和“创建者”的角色是存在的。
其中,“控制者”和“协调者”之间有微妙的差异。
关于这一点,一些管理方面的书上讲述的非常清楚。
控制脚本与域模型的区别也就在这一点上。

呵呵,一点浅见,还望老大们多多指点。
回复
ozzzzzz 2004-11-19
wonder
我的意思是我们在讨论PEAA这个书到底在说些什么,所以我只能一再的建议你。你觉得我的建议过分吗?
同时也请你再仔细的看看我上面的解释,我的观点依然是原来的,在面向对象的思想中没有一个控制者存在。并不是写几个类就是面向对象了,也不是用几个模式就面向对象了。
边界不等于控制,控制也不等于需要一个从外而内贯穿整体的控制。
to all
PEAA的思想是很系统化的,不能孤立地看一个地方的单独表述,很多问题前面说了,你看不明白,你继续看,就会有答案。
回复
w102272 2004-11-19
首先,不要没完没了对我推荐PEAA,是否要看这本书,我自己有我的打算。
我建议你多看看高等数学的书,多看看管理的书,多看看需求分析的书,对你也一定有很多的启发。

其次,“在面向对象的思想中没有一个控制者存在”这个话是你在前面说的,可你上面的解释
却和这个说法又违背,呵呵,我已经不知道你在说什么了。 打住吧...
回复
ozzzzzz 2004-11-18
w102272(Wonder)
我同意没有必要为了OO而OO。但是我们也不能就此排斥OO。
实际上面向过程的简单是建立在其扩展和维护的困难的基础上的。比如你的那个例子,如果单纯的表达吃饭,那么完全没有必要那么复杂。但是如果我们要吃药呢?我们要是喝酒呢?我们要是吃白面呢?我们要是吃瓜子呢?我们要是吃那些不知道是什么的莫名其妙的东西呢?这个时候你的那个面向过程的方法就会显示出其扩展难的短处。而当你尽一步的要考虑还要说话,还要喝水,还要呼吸,还要游泳,还要等等其他的生理作用,你的那个局部的面向过程的简单就会造成整体的面向过程的复杂。
而使用领域模型和使用脚本其实都是有其约束条件的,不是所有的地方都应该去用领域模型,也不是所有的地方都应该用脚本。首先我们需要理解脚本和领域模型的区别,才能针对性的分析究竟那一个策略才更适合你目前的环境。
其次我建议你还是应该买那个PEAA看看,会对你有很多思考的促进。
回复
ozzzzzz 2004-11-18
wonder
我再一次建议你去买一本PEAA。这样会对你有很多的启发。
实际上领域模型不是流行的东西,现在流行的是业务脚本。你去10个项目看,九个是业务脚本的。
我们说没有一个控制,并不是说没有边界。而使用控制不使用对象自身的交互,带来的问题其实与它产生的效益一样大。还是那个例子,一个控制类可以很好的解决单一的问题,如果进行扩张,比如考虑所有的用嘴的动作,那么也是可以的。但是随着不断的扩张,最后总有一天,你会发现你的领域中存在了太多的不同位置的类,你为嘴的和鼻子的其实有关系,为眼睛的也有联系,为手臂的还有。这些东西之间有些是重复的,有些是不重复的。你要花费很大的精力去维护这些东西。而这些时候你就没有使用领域模型来的简单。其实复杂的逻辑,你使用对象分解要比使用集中控制简单和方便的多。
领域模型之所以存在,并不是因为它流行,而是因为他解决了复用和复杂性的问题。这一点就和PO一样,并不能因为其不合潮流,就否认其在项目中的作用。
回复
w102272 2004-11-18
呵呵,我的说法里头并没有把OO对立起来,我要说的还是模拟要有个范围和程度控制。
实际上一个人是可能又吃饭,又喝酒,又吃白面,又吃瓜子,又吃莫名其妙的东西,又游泳,又呼吸
但说到这个,就牵涉一个问题,无论是PO还是OO方法要解决的问题域到底是什么,这是根本性的问题。在具体环境下那种手段更复杂,也要具体看了才知道。对于具体问题来说,适合的方法才是好方法,而不是流行的方法就是好方法。你的假设要先成立才行。

别的东西不说了,我看没有什么矛盾,只是表述不同。
我上面回复想说明的只有一点“在面向对象的思想中没有一个控制者存在”这个说法我认为不对。
1.一个系统无论是采用加工还是模拟,都需要和外部环境交互,都是有边界的,不可能是一个彻底封闭的系统。无论抽象到什么程度,都需要一个给予“原动力”的启动者,这个因素不可能由内因产生。是外在环境因素推动了生物进化,而不是生物坐在那里自己进化。
2.从PO的数据加工角度看,需要一个外部控制者来调度所有的数据加工逻辑,这样才方便
从OO角度看,自己包含一个控制类来覆盖所有的状态变化和逻辑体现为一种自主处理的工作模式,
都是为了实现集中控制集中调度的原则,这没有什么不对的。虽然说没有中央控制的OO程序确实
可以工作,但稍微复杂一点的逻辑没有这种控制器逻辑的程序几乎没法想象它能够很好的工作。
回复
w102272 2004-11-17
不太同意:“在面向对象的思想中没有一个控制者存在”或许不是否定概念本身,但在建模过程中何必非要把这个控制者干掉呢? 它招谁惹谁了。

毕竟现在的计算机是诺依曼型的有限自动机,说到底还是个计算机器。你按下电源机器去读启动记录然后执行,那必须读启动记录是那个对象的原则?是谁给了整个系统最初的原动力和运行价值?难道是系统中某个对象的自发反应?
在很多情况下,面向过程的思路是简单而清晰的。好比你吃饭:端碗,拿筷子,挟肉,放嘴里头,吃。 如果非要定义为,人,碗,肉,嘴的复杂交互作用。那这个Job的目的性又体现在那里了?

没有必要非为了符合某个所谓的OO原则,非要把一个简单的事情当做一个包含了无数蝴蝶效应的巨系统去研究吧?这种模拟总要有个范围和程度控制才好。

回复
mis98ZB 2004-11-06
嘿嘿,又有一点新想法。

域对象比事务脚本里使用的对象要更加“主动/自立”一些。
它们自己控制自己领域内的工作,而不需要一个额外的控制类/控制脚本来指指点点。
它们自己就拥有自己领域内的全部逻辑,是自己领域内的专家。(正好符合GRASP的专家模式)
这切实地贯彻了“将数据与对该数据操作的行为绑定在一起”的面向对象的指导思想。

这个“主动”的对象与《UML手册》里那个主动对象不是同一个东西,所以有些时候它被称作主动记录集。
回复
agiler_charming 2004-11-02
我理解的MVC的动机是:
同一类数据上有两类以上的正交操作,为了追求细粒度而把这些正交操作分离开。
不知道对不对?

===============================================================================
我要骂人了!
天才把复杂的事变简单,*才把简单的事变复杂...
回复
agiler_charming 2004-11-02
我理解的MVC的动机是:
同一类数据上有两类以上的正交操作,为了追求细粒度而把这些正交操作分离开。
不知道对不对?

===============================================================================
我要骂人了!
天才把复杂的事变简单,蠢才把简单的事变复杂...
回复
mis98ZB 2004-11-02
我理解的MVC的动机是:
同一类数据上有两类以上的正交操作,为了追求细粒度而把这些正交操作分离开。
不知道对不对?
回复
agiler_charming 2004-11-02
领域建模时用面向对象的思维,面向对象的重点也在于此.
但在实现中就不可能有绝对纯的面向对象了,引入一些所谓的控制者类是很自然的事,设计模式里的那些**者,**器不都是些"无中生有"的类嘛
回复
aboush 2004-11-02
为什么"无中生有"?个人觉得类似控制类都是必要的,就象是现实中的控制器一样,而且它可能是无形的,也就是说你可能受到自己也不能感觉出来的控制器的控制.
至于mvc本来就不复杂,不然的话,它怎么可能这么流行呢,一般流行的东西都比较简单.简单优雅嘛.
其实在没有mvc之前就有很多人把不同职能的类,或是模块分开,这样开发的思路清楚,层次感强,当然好处太多了.
mvc则更强调这点,他要求一定要分离不同的职能,我个人设计的时候一般不会说:哦,我这个构架是mvc......的.我一般说:哦,这个模块是负责什么职能的,开发的时候应该怎么怎么.....!
也就是说模式,构架我都只记住他为什么这么作,有什么好处,这些好处在什么时候可以发挥的最好.
一旦我觉得这里需要这样的好处,我就默认的按照那样去做.
以上是小弟的愚见,见笑了
回复
mis98ZB 2004-11-02
呵呵,天才蠢才都与我无关,反正我对MVC的看法就是这样的。
回复
发动态
发帖子
研发管理
创建于2007-08-27

1176

社区成员

软件工程/管理 管理版
申请成为版主
社区公告
暂无公告