关于业务逻辑放置位置的问题和大家讨论

06-02-17 zhangmingjing
现在大概有两种做法:

1、Domain Model中不放置任何的逻辑,而在而把所有的业务逻辑都放在Servcie Layer,这层出于Domain Model之上。

2、在Domain Model上放置业务逻辑,在Servcie Layer通过掉用具有丰富行为的Domain Model来实现业务逻辑。

Eric Evans在《Domain Driven Design》建议采用第2种方式。

对此大家有什么看法?

banq
2006-02-21 16:16
这个问题涉及贫血模型说法,现在一般是采取第一种为主,逐渐会采取第2种。

zhangmingjing
2006-02-24 11:08
谢谢回复。

想问一下,这里的逐渐会采用第二种的意思是

1、随着项目的迭代开发逐步进化,还是

2、软件行业整体水平的提高。

3、其它

banq
2006-02-24 11:26
主要是除了OO设计考量之外,还需要考虑性能以及事务等纯计算机机制,这些都无法直接加在Model中,如果加上,无疑Model很重,通过Service我们可以完成性能提升和事务等机制。

目前Ruby这样的DDD框架主要是倡导简化,提倡直接将Model面对表现层,这样就必须将业务逻辑装在Model中,其实以前JiveJdon2.5都是这么设计的,你在JiveJdon2.5的jsp页面中,看到都是Forum ForumThread等这些Model,而没有Service或Manager等(很少)。

以Jdon框架应用JiveJdon3.0来说,它是Model + Service的结构,Ruby等DDD框架不是提倡Model直接面对表现层吗?为什么要这样做?因为设计时简单,能够紧紧抓住Model这个中心。

了解这个背后的目的,Jdon框架采取的是折中方案,在设计编码时,完全是围绕Model设计来决定Service内容设计的,Service好像只是Model的一个装配车间,表现层希望展现什么数据,是由Model内容决定的,是直接和Model交互的,虽然Model的创建是从Service中获得(这是正常,任何一个事物不能自己创建自己,必须依赖母体)。以上设计可以从JiveJdon3.0源码中看出。

banq
2006-02-24 11:30
>想问一下,这里的逐渐会采用第二种的意思是

所以,简短回答你这个问题,如果第二种实现:使用MDA

使用MDA工具,你只要画出四色图(无需顺序图),将业务逻辑通过四色图中展现,这样最后生成可运行代码,这时,你就觉得根本没有做任何Service,其实Service这些已经由MDA工具实现了,而且运行时还需要,只是你没有接触到罢了。

猜你喜欢
2Go 1 2 下一页