关于jivejdon的DDD思考!

08-05-13 freeren
         

最近一直在学习DDD,贴子看了很我,吸收了很多来自不同人的精华,基本上知道DDD的核心在于领域,其他都基于领域的操作。按Banq老师的说法是分为实体、值对象和服务,其中服务可为分应用层与领域层,而领域层是可以再细分为领域服务和领域对象,领域服务依赖领域对象;应用层是主要处理业务逻辑的,领域层处理的就是核心领域对象啦。那么我们可不可以这样理解呢?领域对象一般是实体与值对象的集合,其中实体除了相应的属性还有对于自身的一些操作,而值对象就是纯粹的数据载体!这时候对于领域一些非自身操作又不是涉及业务逻辑的就交由领域服务来处理了,而这些处理又都是依赖于Repository。那么我觉得难点应该就在于:1、把业务逻辑与领域对象自身的操作区分开来;2、实体与值对象的定义;3、实体的操作与领域服务的区分。
如果以上的理解是符合DDD的话,那么来看看jivejdon的DDD吧:
我觉得老师是把service包对应于上述的应用层,也就是处理业务逻辑的,这些是依赖于:领域服务、Repository、dao等;那么manager包的应该就是领域服务层的了,那么在jivejdon我就分不出实体与值对象了。好像两者混着用了,只是在用法上区分出来!
不知道我这样的理解是否符合老师的设计,请指正,谢谢!

         

freeren
2008-05-13 18:01

不好意思,提交了两次!

banq
2008-05-14 07:15

>那么在JiveJdon我就分不出实体与值对象了
Forum是实体 值对象是FourmState

>业务逻辑与领域对象自身的操作区分开来
这个就要看什么属性是对象本身的约束,也就是如何定义一个对象,其实对象自身操作有本身就是实现业务逻辑。

freeren
2008-05-14 18:22

谢谢老师的回复,实在是惭愧,因为分析得不够,看到model中的类都是只有get\set,没有包含实际动作,就认为实体与值对象混起来了。看来在区别这二者并不是从代码来区别,而是从实际中来区别,以他们的作用来区别。
>这个就要看什么属性是对象本身的约束,也就是如何定义一个对象,其实对象自身操作有本身就是实现业务逻辑。
我想我理解的业务逻辑与老师定义的业务逻辑有了偏差,这个不在此讨论。不过还有一点不明白:如果业务逻辑都可以在应用层、领域服务还有领域对象定义,那个为什么还要区分这些呢?

banq
2008-05-16 08:32

>如果业务逻辑都可以在应用层、领域服务还有领域对象定义
我认为业务逻辑主要在领域层,而不是应用层。领域对象就是业务逻辑的核心代码,这就是MDD核心。

2Go 1 2 下一页