freedom icon indicating copy to clipboard operation
freedom copied to clipboard

关于领域划分的疑问

Open zevingao opened this issue 4 years ago • 11 comments

疑问: 1、示例中把多个领域的代码放到了一个domain下,为什么不拆分成多个domain呢? 例如 domain/user domain/order domain/goods,每个domain只暴露service给controller调用 2、放在一个domain下当拆分成微服务时候是不是很麻烦呢? 3、聚合服务该怎么分层呢?比如下单操作同时依赖用户服务、商品服务、库存服务和订单服务等,这个服务要单独拆出来吗?还是直接写在订单服务里面?这样是不是就依赖了其他服务了?还是说调用其他服务的api方式来解决呢?

望解惑,谢谢。

zevingao avatar Jul 23 '20 04:07 zevingao

1。 fshop的篇幅有限,以单体的面貌容易讲解。 2。domian里全是对象了,理论上可以不拆子包了。因为本身就不是 package.func 3。看下聚合根工厂、聚合根、实体的关系处理

8treenet avatar Jul 23 '20 04:07 8treenet

如果服务是单独拆出来的。 repository无非就是把从以前mysql的读写改成http的读写。 repository本身的价值就体现了。

8treenet avatar Jul 23 '20 04:07 8treenet

1。 fshop的篇幅有限,以单体的面貌容易讲解。 2。domian里全是对象了,理论上可以不拆子包了。因为本身就不是 package.func 3。看下聚合根工厂、聚合根、实体的关系处理

关于第3个问题,看了您的文章还是不太明白。可以直接告诉我该怎么处理吗?谢谢。

zevingao avatar Jul 23 '20 04:07 zevingao

那就假有用户服务的概念,微服务组成。 下订单 涉及到实体,有用户实体、订单实体、商品实体。这些实体都是Repository来创建的。 那么这个下订单聚合了多个实体,它就叫做聚合根。这样说的简单吧。

那么要创建一个下订单的聚合根,就有工厂去创建,它通过Repository来加载聚合根里的各种实体。

本质上你想问的就是 用户的实体现在是读数据库出来的,Repository屏蔽了数据细节。完全可以改成http

8treenet avatar Jul 23 '20 04:07 8treenet

那就假有用户服务的概念,微服务组成。 下订单 涉及到实体,有用户实体、订单实体、商品实体。这些实体都是Repository来创建的。 那么这个下订单聚合了多个实体,它就叫做聚合根。这样说的简单吧。

那么要创建一个下订单的聚合根,就有工厂去创建,它通过Repository来加载聚合根里的各种实体。

本质上你想问的就是 用户的实体现在是读数据库出来的,Repository屏蔽了数据细节。完全可以改成http

好的大概明白了,就是单独出来一个订单聚合根这样一个服务层,让它依赖其他几个服务,这些服务可以是数据库查询也可以是api查询。非常感谢。

zevingao avatar Jul 23 '20 05:07 zevingao

大体对上了, 但订单聚合根其实不是一个层。不能用分层概念去看它。订单聚合根是派生自订单实体,并且组合了其他实体。它是有订单状态,订单行为的聚合对象。

分层害死人啊。

8treenet avatar Jul 23 '20 05:07 8treenet

哈哈,好的,多谢解惑

zevingao avatar Jul 23 '20 05:07 zevingao

大体对上了, 但订单聚合根其实不是一个层。不能用分层概念去看它。订单聚合根是派生自订单实体,并且组合了其他实体。它是有订单状态,订单行为的聚合对象。

分层害死人啊。

你好,想请问下,为什么说分层害死人,我是ddd初学者。希望能帮我解惑一下。

knight0zh avatar Jul 24 '20 07:07 knight0zh

你好,关于聚合根我有个疑问,聚合根应该也是个实体吧,有全局唯一标识以及独立的生命周期,但是示例中的大多数聚合根感觉本质是一个行为,然后包含一个实现这个行为的方法,比如 OrderPayCmd 支付订单聚合根,我想这里聚合根是不是分的太细了,能解释下吗,谢谢。

Xuwudong avatar Aug 25 '21 13:08 Xuwudong

看下实现领域驱动设计 聚合那一章的353页,里面有cqs概念,如果不用cqs 会造成什么样的困难。

八叉树 @.***

------------------ 原始邮件 ------------------ 发件人: Xuwudong @.> 发送时间: 2021年8月25日 21:29 收件人: 8treenet/freedom @.> 抄送: 8treenet @.>, Comment @.> 主题: 回复:[8treenet/freedom] 关于领域划分的疑问 (#15)

你好,关于聚合根我有个疑问,聚合根应该也是个实体吧,有全局唯一标识以及独立的生命周期,但是示例中的大多数聚合根感觉本质是一个行为,然后包含一个实现这个行为的方法,比如 OrderPayCmd 支付订单聚合根,我想这里聚合根是不是分的太细了,能解释下吗,谢谢。

— You are receiving this because you commented. Reply to this email directly, view it on GitHub, or unsubscribe. Triage notifications on the go with GitHub Mobile for iOS or Android.

8treenet avatar Aug 25 '21 15:08 8treenet

我理解,目前跨域的操作都放在聚合根下,那应用层实际上就不处理多域之间的交互了嘛

ericzhao007 avatar Jul 25 '22 08:07 ericzhao007