bytedance/dddfirework

解决 Act 方法中删除聚合根的歧义问题

kirinzhong opened this issue · 0 comments

当前,在 Act 方法中删除聚合根的操作有较大歧义,开发者很容易会忘记在 Build 中返回,而直接通过 RootContainer.Remove 方法删除一个新建的聚合根,导致删除失败。

究其原因,RootContainer.Remove 的方法接受一个聚合根,语义上未明确是必须 “在 RootContainer 里面的聚合根”,并且该方法没有直接返回错误。

我们可以做以下改进:

  1. 修改 Act 方法签名为 "Act(ctx context.Context, container ddd.RootContainer) error" ,把 roots ...ddd.IEntity 参数去掉,同时在 RootContainer 新增 GetRoot 方法获取 Build 方法中返回的聚合根。好处是让用户建立 RootContainer 即接受 Build 参数的容器的概念,从而 Remove 也自然需要是已经在容器中的聚合根。

  2. 在 RootContainer.Remove 增加错误返回,强化传入一个非法聚合根的错误提示。