在CQRS和DDD的背景下,您如何处理略有不同的用例?

时间:2016-12-21 08:32:51

标签: architecture domain-driven-design cqrs

我可以为每个变体设置一个命令,或者我可以有一个命令并处理其中的变化。

为了说明,我有三个用例(或更多)," CommentOnPhoto"," CommentOnWall"," CommentOnArticle"。所有这些都在内部使用相同的评论系统。三者之间的区别是:

  • 需要检查不同的政策(CommentOnPhotoPolicyCommentOnWallPolicyCommentOnArticlePolicy
  • 必须从存储库中提取不同的聚合,以便我们可以调用photo.attachComment(comment)article.attachComment(comment)等。

如果为每个变体执行一个命令的路由,那么每个命令是否应该从某个基本CommentOnSomething命令继承,因为它们都非常相似?

如果针对所有用例使用一个母命令的路径,那么我们将不得不使用服务定位器来按需提取所需的策略和存储库(我们不想为每个用例注入10多个依赖项只使用一个)。如果我们利用抽象工厂等来隐藏服务定位器的使用,这是否可以接受?这意味着我们CommentPolicyFactoryCommentableFactory在内部使用服务定位器来提供正确的策略和正确的聚合。

1 个答案:

答案 0 :(得分:2)

每个变体一个命令。

我首先关注创建一个非常通用的“评论”组件(作为自己的项目,与您的核心域分离)。一旦拥有它,那么只需几行代码,您的命令CommentOnPhotoCommentsOnWall和其他命令就会变得非常简单。