`
lifethinker
  • 浏览: 71202 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

答复: 要领域模型干嘛?

    博客分类:
  • java
阅读更多
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订阅的贴子,好多帖子点进来发现已经被删除了。

分享到:
评论

相关推荐

    MVC详解:了解真正所谓的框架

    似乎很少很少有人能够给我非常满意的答复。因为他们都在为了学习而学习,为了工作而学习,而不是在真正去深入了解一个框架。其实所有的人都应该思考这样的问题:为什么要学习框架?框架到底给我带来了什么?...

    罗纳德·里恩斯(UvT-TILT)的回复:注意我的脚步吗?-研究论文

    在此答复中,一方面是由位置数据触发的配置文件数据,另一方面是基于基于位置数据构造的配置文件(称为基于位置的配置文件)之间的区别。 与常规的LBS相比,由于计算复杂性和附加值有限,移动运营商不太可能进行...

    答复: PHP验证框

    NULL 博文链接:https://xieye.iteye.com/blog/540724

    答复: 喜欢和使用Portal的朋友请进!

    博文链接:https://eric2007.iteye.com/blog/158580

    答复: 一道经典线程面试题的4种解法

    NULL 博文链接:https://houfeng0923.iteye.com/blog/1251682

    答复: 通过代码简单介绍JDK 7的MethodHandle,并与.NET的委托对比(二)

    NULL 博文链接:https://rednaxelafx.iteye.com/blog/479301

    答复: Java开发规范,让你写的一手好代码,看了之后不用自卑

    NULL 博文链接:https://cq-charlie.iteye.com/blog/1250485

    论文研究 - 加拿大安大略省的风力涡轮机事件/投诉报告:回顾-为什么如此重要?

    只有1%的报告得到了优先答复。 省级官员在摘要报告中指出,人们报告的健康影响包括:头痛,睡眠不足,烦躁不安以及头和耳朵的响声或压力感。 对健康的影响已有许多报道,包括儿童中的健康影响。 讨论:对于风力...

    mediapipe模型库

    在import模型时,有时候因为网络问题无法加载mediapipe模型。可以将附件拷贝到对应的目录即可。具体报错如下:TimeoutError: [WinError 10060] 由于连接方在一段时间后没有正确答复或连接的主机没有反应,连 接尝试...

    高手谈设计模式高手谈设计模式

    策略模式:刘备要到江东娶老婆了,走之前诸葛亮给赵云(伴郎)三个锦囊妙计,说是按天机拆开 解决棘手问题,嘿,还别说,真是解决了大问题,搞到最后是周瑜陪了夫人又折兵呀,那咱 们先看看这个场景是什么样子的。 先...

    计算机基础作业1.doc

    " " " A、十六进制 " " " B、二进制 " " " C、八进制 " " " D、十进制 " " " " " " 你的答复: B ( ) 参考答案:B " " "2、在微型计算机系统中,微处理器又称为_________。 " " " A、RAM " " " B、ROM " " " C、...

    Piwaa - LinkedIn Messaging Tool-crx插件

    集成到优化且令人愉悦的用户界面中,此消息传递允许::check_mark_button:安排自动跟进(例如,当某个联系人要求稍后与他人联系时):check_mark_button:创建并使用已保存的答复以回答重复出现的问题:check_mark_...

    password-gen

    为此,要进行预检查以检查是否: 输入的值是一个数字 如果不是数字,则提醒用户并要求输入数字 如果是数字,则将其转换为int并检查是否为8 <= number <= 128。如果数字<8> 128,请警告用户在此范围内输入数字...

    答复:答复“通向开放未来的捷径”

    该资料库包含一篇有关如何改变SpringerNature性质的社论,可从CC-BY开放获取化学信息期刊上看到。

    答复:由Flutter构建的“答复”材料设计案例研究

    要在手机上安装该应用程序,您有两种选择。 对于Android,您可以从标签下载预编译的APK文件,或使用此。 您也可以在本地下载并构建项目-为此,您需要在本地安装Flutter。 只需克隆项目,然后在根目录内执行flutter ...

    gu-trainer:爬行动物组织为BZFlag提供的GU培训图

    GU教练员地图 ... 我们将尽快答复他们。 作者 活跃的RO贡献者 (创始人) 谢谢 非常感谢向我们提供宝贵帮助的所有人员,尤其是: Allejo blast007 tw1sted 执照 所有地图均根据许可。 如何使用

    专利审查意见的答复与技巧.pptx

    审查意见通知书答复方法及技巧 第一节 实质审查程序及原则 第二节 申请文件的修改 第三节 审查意见的理解 第四节 审查意见答复原则与策略 意见陈述书 是否修改? 如何阐述理由? 结尾

    答复审查意见通知书通用格式.doc

    答复审查意见通知书通用格式 专利意见陈述书 回复格式: 尊敬的审查员先生/女士: 首先感谢您对本申请的认真审查。对于审查员的意见,申请人进行了认真的研读,(简述审查员的意见,表明同意或者不同意查员的...

    9anime-Companion:9anime的简单伴侣扩展

    如果您有任何问题,只需将其归档,但是我一会儿不会答复。 -lap00zza9动漫同伴 9anime的简单伴侣扩展产品特点删除广告/弹出窗口下载所有剧集MyAnimeList集成实用工具栏最近观看的列表切换页面元素(评论,您可能也...

Global site tag (gtag.js) - Google Analytics