`

领域驱动设计之聚合与聚合根实例一(订单)

阅读更多

领域驱动设计之聚合与聚合根实例一

通过一个实例来说明如何划分聚合与聚合根

场景:一个下订单的业务,一个订单必须有相应的客户信息,订单下有订单项,每个订单项必须有相应的产品信息,产品有分类的信息。

1.根据这个基本的需求,我们初步确定的实体、值对象与关联关系为(这里采用EF的Model First):

2.经过业务深入分析,以及聚合与聚合根确定原则,最终我们确定的聚合与聚合根是(红色代表聚合根,蓝色代表聚合内的实体,灰色代表值对象):

划分与确定理由
1.订单、客户与产品都可以在不同的领域被独立访问到,所以应该是属于不同聚合的聚合根。

2.订单初看好像要依赖于客户才能存在,其实不然,一是订单的生命周期与客户的生命周期不是一致的,二是订单与客户之间也没有不变的一致性规则。

3.订单只需要下订单那个时刻客户的姓名、电话与地址等相关信息,所以作了一个值对象保存那个时刻的客户相关信息,因可能业务上需要通过订单查询客户当前的信息,所以做了一个客户ID关联到客户对象。

4.订单项也只需要那个时刻的产品的名称、单价等信息,所以作了一个值对象保存那个时刻的产品相关信息,因可能业务上需要通过订单项查询产品当前的信息,所以作了一个产品ID关联到产品对象。

5.产品初看好像要依赖于产品类别,实际上产品类别只是对产品的一种划分,所以产品类别做成值对象,如果业务上要对某个产品类别进行促销等业务逻辑,则产品类别应该划为一个单独聚合的聚合根。

分享到:
评论

相关推荐

    领域驱动设计C#2008实现原代码

    领域驱动设计(Domain-Driven Design,简称DDD)是一种软件开发方法论,由Eric Evans在其同名著作《领域驱动设计:软件核心复杂性应对之道》中提出。它强调以业务领域为中心,通过深入理解和建模业务规则来驱动软件...

    领域驱动设计:软件核心复杂性应对之道.Eric.Evans

    《领域驱动设计:软件核心复杂性应对之道》是Eric Evans的经典著作,这本书深入探讨了如何在复杂的软件开发项目中有效地管理业务逻辑和模型。DDD(领域驱动设计)是一种软件开发方法,它强调通过理解和建模业务领域...

    《实现领域驱动设计》中的源码(java版 & C#版)

    《实现领域驱动设计》这本书是Eric Evans的经典之作,它深入探讨了如何在软件开发中运用领域驱动设计(Domain-Driven Design, DDD)方法论。DDD是一种将业务领域知识与软件开发紧密结合的设计策略,旨在提高复杂系统...

    领域驱动设计与模式实战

    领域驱动设计(Domain-Driven Design,简称DDD)是一种软件开发方法,它强调通过深入理解和建模业务领域来驱动软件的设计和开发。这种方法的核心在于将复杂的业务逻辑转化为可操作的软件模型,使得软件更贴近业务...

    领域驱动设计精简pdf版

    领域驱动设计(Domain-Driven Design,简称DDD)是一种软件开发方法论,由Eric Evans在其同名著作《领域驱动设计:软件复杂性应对之道》中提出。这种方法论强调以业务领域为中心,通过深入理解和建模业务领域,来...

    领域驱动设计精简版(PDF)

    领域驱动设计(Domain-Driven Design,简称DDD)是一种软件开发方法论,由Eric Evans在其同名著作《领域驱动设计:软件核心复杂性应对之道》中提出。这种设计方法强调通过深入理解和建模业务领域的核心概念,来驱动...

    《领域驱动设计C# 2008实现问题.设计.解决方案》.((美)Tim McCarthy)

    领域驱动设计是一种软件开发方法论,它强调将业务领域的复杂性作为核心,并围绕这一核心构建软件系统。DDD的核心理念是将业务逻辑与技术实现紧密结合在一起,从而创建出能够更好地反映业务需求的软件系统。这种方法...

    实现领域驱动设计.pdf

    领域驱动设计(Domain-Driven Design,简称DDD)是一种软件开发方法,它强调通过与领域专家紧密合作,将复杂的业务逻辑转化为可执行的软件系统。在《实现领域驱动设计》这本书中,作者深入浅出地讲解了DDD的核心概念...

    领域驱动设计

    领域驱动设计(Domain-Driven Design,简称DDD)是一种软件开发方法论,由Eric Evans在其同名著作《领域驱动设计:软件核心复杂性应对之道》中提出。DDD旨在通过紧密合作的跨职能团队,将业务专家的领域知识与软件...

    解构领域驱动设计 彩色配图 非PDF

    由Eric Evans在其2004年的著作《领域驱动设计:软件核心复杂性的应对之道》中提出,DDD的核心是通过与领域专家紧密合作,挖掘并清晰表达业务规则和概念,以此来指导软件架构和实现。本资源提供了非PDF格式的彩色配图...

    Domain+Driven+Design 领域驱动设计

    领域驱动设计中的聚合(Aggregates)是一种设计模式,用于维护领域对象集合的一致性和完整性。聚合通常包含一个根实体(Aggregate Root),负责外部交互,并保持其内部成员对象的业务规则。聚合的引入有利于数据的...

    领域驱动设计(附DEMO)

    领域驱动设计(Domain-Driven Design,简称DDD)是一种软件开发方法,它强调通过与领域专家紧密合作,将复杂的业务逻辑转化为可操作的软件模型。在本资源中,附带了一个DEMO,很可能是用于演示DDD如何应用于实际项目...

    领域驱动设计模型例子-Java.rar

    总结一下,这个压缩包提供了一个基于Java的领域驱动设计实例,可以帮助开发者深入理解DDD的概念,学习如何在实际项目中应用DDD来解决复杂业务问题,提升软件的质量和可维护性。通过对这个例子的分析和学习,我们可以...

    《领域驱动设计C# 2008实现问题.设计.解决方案》.((美)Tim McCarthy) [PDF].rar

    《领域驱动设计C# 2008实现问题.设计.解决方案》这本书是美国作者Tim McCarthy的作品,专门探讨如何在C# 2008环境下应用领域驱动设计(Domain-Driven Design, DDD)来解决复杂的软件开发问题。DDD是一种以业务领域为...

    DDD领域驱动设计基本理论知识总结.docx

    领域驱动设计(Domain-Driven Design,简称DDD)是一种软件开发方法,旨在通过深入理解和建模复杂的业务领域,来创建高质量、易于维护的软件系统。DDD的核心在于领域模型,它是对业务领域的抽象表示,包含了业务规则...

    DomainDrivenDesignSample:C# 实现的一个领域驱动设计示例

    综上所述,"DomainDrivenDesignSample"项目提供了一个学习和实践领域驱动设计的C#实例。通过深入源代码,我们可以更好地理解DDD如何帮助我们将复杂的业务逻辑转化为清晰、可维护的软件架构,同时利用JavaScript进行...

    DDD领域设计模式代码案例

    DDD(领域驱动设计)是一种软件开发方法,它强调以业务领域为中心进行系统设计,通过将复杂的业务逻辑转化为可理解的模型来提升软件质量。在Java环境下,DDD可以帮助开发者更好地理解和实现业务逻辑,提高代码的...

    java领域模型代码示例

    在软件开发中,领域模型(Domain Model)是根据业务领域中的概念、规则和逻辑构建的抽象模型,它是领域驱动设计(Domain-Driven Design,简称DDD)的核心组成部分。领域模型能够帮助我们更好地理解和表达复杂的业务...

Global site tag (gtag.js) - Google Analytics