我可以为每个变体设置一个命令,或者我可以有一个命令并处理其中的变化。
为了说明,我有三个用例(或更多)," CommentOnPhoto"," CommentOnWall"," CommentOnArticle"。所有这些都在内部使用相同的评论系统。三者之间的区别是:
CommentOnPhotoPolicy
,CommentOnWallPolicy
,CommentOnArticlePolicy
)photo.attachComment(comment)
,article.attachComment(comment)
等。如果为每个变体执行一个命令的路由,那么每个命令是否应该从某个基本CommentOnSomething
命令继承,因为它们都非常相似?
如果针对所有用例使用一个母命令的路径,那么我们将不得不使用服务定位器来按需提取所需的策略和存储库(我们不想为每个用例注入10多个依赖项只使用一个)。如果我们利用抽象工厂等来隐藏服务定位器的使用,这是否可以接受?这意味着我们CommentPolicyFactory
和CommentableFactory
在内部使用服务定位器来提供正确的策略和正确的聚合。
答案 0 :(得分:2)
每个变体一个命令。
我首先关注创建一个非常通用的“评论”组件(作为自己的项目,与您的核心域分离)。一旦拥有它,那么只需几行代码,您的命令CommentOnPhoto
,CommentsOnWall
和其他命令就会变得非常简单。