`
hatedance
  • 浏览: 59071 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
文章分类
社区版块
存档分类
最新评论

DDD实践,该贫血还是充血?

阅读更多
对于ddd,曾经有很多的争论,到底该选择贫血,充血,还是失血?我看了N多帖子,似乎都没有结论,中庸的人说了各种模型的优缺点,似乎是没有答案。
昨日看Pro Spring一书,2005年版的,书中早已给出了答案。
原则就是domain对象不依赖非domain对象。
什么意思呢,即domain对象不能依赖service,DAO等对象。然后尽可能的把职责落实到domain对象。
比如save方法,不应该赋予domain对象,因为要调用DAO对象,所以赋予service对象就可以了.
addOrderItem(Item item)方法应该赋予domain对象,应为item参数也是domain对象。

遵守了这个原则的好处是,domain对象可以被重用,不依赖于任何持久化逻辑。
domain对象不需要也不知道自己如何或是否被持久化了,内存有限的情况下,当需要用的时候从数据库读出来,不需要用的时候写回数据库。就像虚拟内存一样,我们的程序甚至不必关心何时内存页面被换出换入。
分享到:
评论
2 楼 pengzhoushuo 2010-12-02  
另外,假如save()改为save(Item item)呢
1 楼 pengzhoushuo 2010-12-02  
兄弟,你说的貌似挺有道理的,但好像经不起推敲哦。

引用
什么意思呢,即domain对象不能依赖service,DAO等对象。然后尽可能的把职责落实到domain对象。
比如save方法,不应该赋予domain对象,因为要调用DAO对象,所以赋予service对象就可以了.
addOrderItem(Item item)方法应该赋予domain对象,应为item参数也是domain对象。


addOrderItem方法,假如要在数据库加一条记录吧,在那里加?在domain对象,按你这种说话即domain对象不能依赖service,DAO等对象,那domain只能自己进行数据库操作了?或者调用另外一个domain,那另外一个domain又在哪里执行数据库插入操作呢?

相关推荐

    对贫血和充血模型的理解

    对于想要深入了解贫血和充血模型的开发者,可以参考"贫血充血00.doc"文档,该文档可能详细介绍了这两种模型的概念、优缺点、适用场景以及实际应用案例。阅读这样的资料有助于提升对设计模式的理解,并能在实际项目中...

    大白话领域驱动设计DDD视频教程

    DDD提倡的充血模型是什么? 体会下充血模型开发微信钱包系统 聚合和聚合根是什么? 领域事件是什么? 看看领域事件的本质(解耦,异步,削峰) 工厂和资源库的作用? 领域服务是什么? 通过用例分析法和领域事件梳理...

    DDD领域驱动设计day01.pdf

    7. **贫血模型**与**充血模型**:贫血模型是指对象主要负责数据传输,业务逻辑存在于服务层;充血模型则强调领域对象内含业务逻辑,对象自身具有行为。 8. **微服务**:DDD常与微服务架构结合,每个微服务专注于一...

    充血模型设想实现(2010/07/30更新)

    充血模型,也被称为“Rich Domain Model”,是领域驱动设计(DDD)中的一种核心概念。在软件开发中,领域模型是对业务领域的抽象和建模,它包含业务规则、逻辑和状态。充血模型强调对象应该拥有自己的行为和状态,而...

    DDD领域驱动设计day02.pdf

    领域驱动设计(DDD)是一种软件开发的方法论,由软件大师Eric Evans在其2004年发表的同名...DDD的实践不仅限于理论层面,还包括了微服务设计、架构规划和系统实施等多个实践环节,是应对复杂业务领域挑战的有效工具。

    11丨实战一(上):业务开发常用的基于贫血模型的MVC架构违背OOP吗?1

    总的来说,选择贫血模型还是充血模型,取决于项目的需求、团队的技术水平以及对代码质量的要求。在实践中,理解这两种模型的优缺点,并根据具体场景灵活选择,是提升软件开发效率和质量的关键。

    领域驱动设计案例-盒马实践

    领域模型可以分为失血模型、贫血模型和充血模型三种类型。 失血模型 失血模型是基于数据库的领域设计方式,它指的是使用 POJO 数据对象来存储业务数据。在失血模型中,业务逻辑是分散的,分布在多个地方。 贫血...

    领域驱动设计学习总结(一)

    2. **领域建模**:构建能够反映业务逻辑的领域模型,避免贫血模型,提倡使用充血模型,即将业务逻辑封装在实体对象内部。 **四、DDD的实践** 1. **领域模型设计**:通常分为战略设计(宏观视角)和战术设计(微观...

    基于领域分析设计的架构规范.docx

    总结来说,基于领域分析设计的架构规范着重于如何通过读写隔离优化查询操作,利用状态图揭示核心业务逻辑,并通过对比贫血模型和充血模型,强调了业务逻辑应与数据结构紧密结合,以提升软件设计的质量和效率。...

    tbl-demo-service-master.zip

    领域模型的职责是实现业务逻辑,如果领域模型只是用来处理简单的逻辑(比如贫血模型),那么领域模型的作用微乎其微,甚至可以忽略,数据转换的成本比领域模型带来的好处还多,这种情况其实就是在原有的分层架构中...

    领域模型驱动设计1553265830.pdf

    领域驱动设计(DDD)是一种专注于复杂业务逻辑软件开发的方法论,它强调将业务领域知识和软件开发紧密结合起来,以实现对业务逻辑的深入理解和清晰表达。在当今互联网产品快速迭代的背景下,领域驱动设计显得尤为...

    支付场景的微服务架构介绍.docx

    DDD最初是为了UML设计和领域建模,强调充血模型,即业务对象不仅包含数据,还包含行为。而在传统的J2EE模型中,通常采用贫血模型,数据与行为分离。微服务的兴起,尤其是在借鉴了DDD中的限界上下文、子域和领域事件...

    支付场景微服务实战

    - **充血模型**: 与贫血模型相反,领域对象包含了丰富的业务逻辑和行为,更符合领域驱动设计的原则。 - **限界上下文**: 是 DDD 中的一个概念,用来明确地界定不同领域模型的作用范围,有助于解决模型冲突和复杂度...

Global site tag (gtag.js) - Google Analytics