问答

领域驱动 多对多建模问题

作者:admin 2021-07-23 我要评论

领域驱动里面说,要避免多对多的关系,但是现在有一个场景不知道该如何处理 场景如下: 用户可以拥有多个支付账号,同时可以新建多个支付类别 例如用户A: 拥有...

在说正事之前,我要推荐一个福利:你还在原价购买阿里云、腾讯云、华为云服务器吗?那太亏啦!来这里,新购、升级、续费都打折,能够为您省60%的钱呢!2核4G企业级云服务器低至69元/年,点击进去看看吧>>>)

领域驱动里面说,要避免多对多的关系,但是现在有一个场景不知道该如何处理

场景如下:
用户可以拥有多个支付账号,同时可以新建多个支付类别
例如用户A:

  • 拥有:支付宝账号、微信账号、各种银行卡账号……
  • 拥有支付类别:日常消费、房贷专用、车贷专用……

用户在支付账号管理页面,可以快捷的批量添加与删除该支付账号隶属于哪些支付类别,
用户也在支付类别管理页面,可以批量的添加和删除关联的支付账号

这个场景下领域建模怎么处理
应该是账号做聚合根,还是类别做聚合根

做无论是哪个做聚合根在做批量处理的时候,怎么查询到对应的聚合根对象

###

应该是三个聚合根,建议读一下实现领域驱动设计一书,尽量设计小聚合根!
三个聚合根分别是账户、支付类型、账户与类型关联关系(用户不考虑,这里用户应该是值对象)。聚合是业务中的最小数据单元,也就是你在进行操作时聚合是一个整体的概念。
从上面的描述,支付类型明显是作为一个单独的业务进行的管理,它的改变并不在账户的业务范围内,所以是聚合根。账户是聚合根这不用进行讨论。
他们之间的关联关系是聚合根,并且只持有账户跟支付类型的唯一标识(聚合根不要直接引用,而是通过标识进行关联),这个聚合根的意义是为了持久化,为账户添加或删除支付类型,属于领域服务,因为这个操作既不是账户的行为也不是支付类型的行为。通过这个中间聚合根就将账户跟支付类型的多对多关系关联起来,并且这些操作并不是账户或者支付类型本身的行为,应该设计成无状态的领域服务。
对于订单与订单明细为什么都作为一个聚合呢?因为脱离了订单的订单明细是没有意义的,他们是一个业务整体。而上面的支付类型与账户很明显不是这样的关系。

版权声明:本文转载自网络,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。本站转载出于传播更多优秀技术知识之目的,如有侵权请联系QQ/微信:153890879删除

相关文章
  • 领域驱动 多对多建模问题

    领域驱动 多对多建模问题

  • mui slide轮播组件,文档里面没有看到si

    mui slide轮播组件,文档里面没有看到si

  • 如何删除动态的js?

    如何删除动态的js?

  • vue 从后台拿到图片数据如何循环显示?

    vue 从后台拿到图片数据如何循环显示?

腾讯云代理商
海外云服务器