关于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核心。

killer
2008-05-22 18:36
实体是可以唯一标识自己并区别于其他实体的,狭义上它是指看得见摸得着的东西,即事物,广义上还可以是抽象的东西,主要是指一个事态,即发生的事实。世界是事实的总体,而不是事物的总体。而事实是事物(以下称为实体,即狭义的实体)的结合。而实体又可以说是值对象的结合。领域对象可以说即是事实和实体对象。领域对象的功能职责即是领域服务,结构决定功能,即它有什么样的内部组成就有什么样的对外的功能,举个例子,一台电脑,它有型号,生产厂家,价格以及组成部分等内部信息,那么它可能有一个功能是获取这台电脑的cpu的型号,但是它绝对不会有一个获取电脑箱的功能。 如果我知道一个对象,那我也就知道这个对象所有行为功能的可能性。把领域服务放大一下,外推一层来考虑,其实就得到了业务逻辑即应用服务,即应用服务是由领域对象决定的。这是一个道理。

(注:以上有些语句引自维特根斯坦的《逻辑哲学论》,建议读一读这本书,对领域建模非常有帮助)

oojdon
2008-05-22 19:29
banq建议程序员去读诗歌,killer建议去读哲学!哈哈,jdon,有意思

不知道jivejdon现在开发到什么样子了,我希望jivejdon能够早日创造辉煌,把discuz给颠覆掉!

killer
2008-05-22 19:56
>>>>banq建议程序员去读诗歌,killer建议去读哲学!

读诗歌和读哲学并不矛盾,都可以培养人的科学思维,提升境界,呵呵。

banq
2008-05-26 11:17
>以上有些语句引自维特根斯坦的《逻辑哲学论》,

这段实体和服务的解释让人开朗,OO确实是一种逻辑哲学,日常逻辑思维清晰的适合搞OO,要达到OO境界,对程序员素质要求很高,无论诗歌 数学都是具体科学,学而时习之:也就是学了后不陌生然后就超越他们,上升到哲学(注意:传统解释是 学了以后再复习它,个人认为这是曲解,正是这种曲解导致如今大量学生被教育读书死机器,死读书,你就是把课本倒背如流又有什么用?八股科举也是这个曲解造成的)。

结合孔子其他语句:温故而知新,学而时习之,不亦乐乎,就可以知道,从学习中得到升华,发现新的东西,这是多么愉快的一件事啊,所以,学习不是学而时常复习它,反复复习怎么会让人愉快呢?只能让人窒息,现在的教育就是这样打着孔子旗帜,曲解前人哲学思想,让人窒息的教育。

如果我们民众是一个善于哲学思考的群体,OO普及就不会如此艰难。。。

为什么很多人觉得Java复杂,新名词多,好像不符合大道至简原则,实际是程序员自身不具备哲学思维能力,都是一些死读书,反复复习无法提升的人,大道至简也是哲学含义的至简,不是简单到任何人都能掌握的,如果这样,世界倒是真的简单了,可惜很多死读书的人就是天真以为大道应该简单到他这种愚钝的人一看就会。

[该贴被banq于2008-05-26 12:17修改过]

killer
2008-05-27 21:50
学习确实是应该这样,应该把所学的东西作为一个梯级,在超越了它时你就会认识到它们是没有意义的,然后你才能真正正确地认识世界!

猜你喜欢