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

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

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

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

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

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

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

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

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

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

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

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
领域驱动设计(Domain-Driven Design,简称DDD)是一种软件开发方法论,旨在解决软件系统中的复杂性问题。在DDD中,核心思想是将软件系统的设计和实现与业务领域的理解紧密结合起来。 以下是一些应对软件核心复杂性的方法,可以在领域驱动设计中使用: 1. 模型驱动设计:在DDD中,通过建立一个明确的领域模型来描述业务领域。这个模型是基于业务需求和业务专家的知识构建的,可以帮助开发团队更好地理解业务需求,并将其转化为可执行的软件模型。 2. 领域专家参与:在DDD中,领域专家是非常重要的角色。他们对业务领域有深入的理解,并能够提供有价值的业务需求。与领域专家进行密切的合作,可以帮助开发团队更好地理解业务需求,并确保软件系统与业务领域保持一致。 3. 战略设计:DDD提倡将软件系统划分为多个子域(Subdomains),每个子域都有自己的边界和职责。通过对子域进行战略设计,可以将软件系统分解为更小的部分,并将复杂性进行有效管理。 4. 战术设计:在DDD中,战术设计是指将领域模型转化为可执行的代码。通过使用一些常见的DDD设计模式,如聚合、实体、值对象等,可以帮助开发团队更好地实现领域模型,并保持代码的可维护性和可扩展性。 5. 持续改进:DDD是一个迭代的过程,需要不断地进行学习和改进。通过不断地与业务专家和开发团队进行反馈和沟通,可以发现和解决软件系统中的问题,并不断提高软件系统的质量和性能。 总之,领域驱动设计是一种应对软件核心复杂性的方法,通过建立明确的领域模型、与领域专家合作、战略设计和战术设计等手段,可以帮助开发团队更好地理解业务需求,并将其转化为可执行的软件模型。同时,持续改进也是DDD过程中的重要环节,可以帮助不断提高软件系统的质量和性能。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值