哪一层负责过滤未激活(标记为已删除)的聚合?



我读了[this][1] (not -delete-just-don)文章,然后我同意不删除聚合。

我的问题是,如果我不使用CQRS,哪一层有过滤停用(标记为删除)聚合的责任?它可能是一个用例?

UI层接口是否有过滤器的参数,应用程序层是否在api上显式显示?像这样的吗?

@RequestMapping(value = "/users/{userId}/articles", method = RequestMethod.GET)
public ResponseEntity<String> getArticlesOfUser(
​@PathVariable long userId,
​@RequestParam(defaultValue = ture, required = false) boolean onlyActivated) {

​if(onlyActivated) {
List<Article> articles = articleApplicationService.getAllActivatedArticlesOfUser(userId);
return articlesResponse(articles);
} else {
List<Article> articles = articleApplicationService.getAllArticlesOfUser(userId);
return articlesResponse(articles);
}
}

还是应该隐藏在持久层?像这样的吗?

public class JPAArticleRepository implements ArticleRepository {
​...
​public List<Article> allArticlesByUserId(long userId) {
​boolean activated = false
​String query = "select article from Article article 
​where article.userId = :userId and article.activated= :activated";
​...
​}
​...
}

任何想法吗?

感谢[1]: https://udidahan.com/2009/09/01/dont-delete-just-dont

建模"软删除"作为业务操作的一部分(而不是隐藏它)是一个很好的策略,所以我建议保持这种方式,而不是将其隐藏在持久化层中。将查询作为业务关注点的一部分,可以为这些查询添加正确的上下文,并遵循"为任务建模,而不是为数据建模"的口号。你可以在Udi的帖子中阅读。

也;一般来说;隐藏东西通常会给代码维护、测试、培训新人等带来麻烦。我喜欢遵循的另一个咒语是"永远知道你在做什么"。

相关内容

  • 没有找到相关文章

最新更新