答复: 要领域模型干嘛?

robbin 写道
这个东西和采用的技术和框架高度相关:

1、如果你用的是Spring,没啥说的,必须贫血,你想充血也充不起来;

2、如果你用的是RoR,也没啥说的,直接充血,你想贫血也未必贫得下来;

3、JBoss Seam其实已经开始从贫血模型向充血模型过渡,我还是比较看好Seam的。

如果脱离具体的场景谈抽象的领域模型,没太多可谈的,因为已经无所谓贫血不贫血的,你在抽象的设计阶段一定是领域模型驱动的,而不是TransactionScript驱动,甚至现在也不是table schema驱动。

 

javaeye的许多人受robbin的影响颇深,对于贫血和充血模型的讨论好像也是自robbin始,但是我认为robbin对贫血充血模型的理解是有局限性的,对robbin说的用spring就没办法充血的观点我也不赞同。

 

我从javaeye长期以来对充血贫血模型的讨论上看,虽然可能没有明示,但是我感觉很多人认为的充血模型就是将持久化逻辑放到domain对象中。但是在Martin对贫血模型的讨论中却并没有谈到这一点,它他只说domain对象应该包含业务逻辑。

Martin Flower 写道
The logic that should be in a domain object is domain logic - validations, calculations, business rules - whatever you like to call it. (There are cases when you make an argument for putting data source or presentation logic in a domain object, but that's orthogonal to my view of anemia.)

 我来翻译一下:包含在领域对象里的逻辑应该是领域逻辑,像验证,计算,业务规则等。你可能会争辩要将数据源或表现逻辑放入到领域对象中,但是这与贫血不相关。这里的数据源逻辑当然就是指持久化逻辑,意思是说领域对象是否包含持久化逻辑并不是衡量是不是充血模型的标准,两者是正交的。

 

javaeye的很多人之所以会认为充血模型就是要将持久化逻辑放入到领域对象中,这当然是受到robbin的影响(这也证明robbin的影响力实在是太大了)。robbin的充血模型以ror为参照,ror的将持久化逻辑集成到领域中实在做得太棒了,以至于robbin认为充血模型应该是这样,但是这不是充血模型的共性,只是一个个性而已。Ror和Java的一个很大的不同就是ror是提供一个一站式的解决方案,使用ror意味着必须使用它提供的持久框架(ActiveRecord)和web框架,而java中你有很多选择,光持久化就有JDBC,Hibernate,JDO,iBatis和JPA,更不必提几百种的Web框架了。在Java中非常灵活,你有选择的权利,付出的额外代价就是得将持久化逻辑从领域中分隔,不是由领域对象负责持久化,而是通过Repository(DAO)接口来实现持久化。Java的持久化框架也尊重这种选择,如果Hibernate野心大一点,它也可以成为一个一站式的框架,一直渗透到web框架中,做出个像Ror的东西来,javaeye的大牛们也做了很多这方面的努力,但是hibernate的创建者很清醒,他们没有这么做。我没用过JBossSeam,不知道这是不是hibernate创建者朝这个方向的一个努力,如果真是这样,也就容易理解robbin为什么认为JBoss Seam是在向充血模型方向转变(并且认为使用spring无法做到充血模型)。

 

如果抛开领域对象必须包含持久化逻辑才是充血模型这一概念,那么在Java中创建充血模型也是很容易的,Spring绝对不是充血模型的妨碍者,恰恰相反,它提供DI,AOP等特性来帮助实现充血模型,就看你怎么用了。如果在Java中使用Spring没法做到充血模型,Martin Flower也不会高喊要充血吧!

 

 

另外采用DDD进行的设计必须要反映到代码上,不能你在设计时使用的是DDD设计,代码却是Transaction Script(贫血模型),这要么是违背了DDD的一些原则,要么是采用的就不是DDD,采用DDD的设计必然是充血模型。

 

p.s. 在对DDD的讨论上,Jdon要比JavaEye要深刻得多,只是Jdon上的垃圾贴太多,这方面JavaEye要严格得多。我只因为回了一个没意义的贴,辛苦挣的积分就全部给扣光了。我在RSS订阅的贴子,好多帖子点进来发现已经被删除了。

期末大作业基于python的足球运动员数据分析源码+数据集(高分项目),个人经导师指导并认可通过的高分设计项目,评审分98分,项目中的源码都是经过本地编译过可运行的,都经过严格调试,确保可以运行!主要针对计算机相关专业的正在做大作业、毕业设计的学生和需要项目实战练习的学习者,资源项目的难度比较适中,内容都是经过助教老师审定过的能够满足学习、使用需求,如果有需要的话可以放心下载使用。 期末大作业基于python的足球运动员数据分析源码+数据集(高分项目)期末大作业基于python的足球运动员数据分析源码+数据集(高分项目)期末大作业基于python的足球运动员数据分析源码+数据集(高分项目)期末大作业基于python的足球运动员数据分析源码+数据集(高分项目)期末大作业基于python的足球运动员数据分析源码+数据集(高分项目)期末大作业基于python的足球运动员数据分析源码+数据集(高分项目)期末大作业基于python的足球运动员数据分析源码+数据集(高分项目)期末大作业基于python的足球运动员数据分析源码+数据集(高分项目)期末大作业基于python的足球运动员数据分析源码+数据集(高分项目)期末大作业基于python的足球运动员数据分析源码+数据集(高分项目)期末大作业基于python的足球运动员数据分析源码+数据集(高分项目)期末大作业基于python的足球运动员数据分析源码+数据集(高分项目)期末大作业基于python的足球运动员数据分析源码+数据集(高分项目)期末大作业基于python的足球运动员数据分析源码+数据集(高分项目)期末大作业基于python的足球运动员数据分析源码+数据集(高分项目)期末大作业基于python的足球运动员数据分析源码+数据集(高分项目)期末大作业基于python的足球运动员数据分析源码+数据集(高分项目)期末大作业基于pyth
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值