哪一层负责过滤已停用(标记为已删除)的聚合?
What layer has responsibility of filtering deactivated(mark as deleted) aggregate?
我阅读了 [this][1] (dont-delete-just-dont) 文章,然后我同意不删除聚合。
我的问题是,如果我不使用 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";
...
}
...
}
有什么想法吗?
谢谢
将“软删除”建模为业务操作的一部分(而不是隐藏它)是一个很好的策略,因此我建议保持这种方式而不是将其隐藏在持久层中。使查询成为业务关注的一部分,为这些查询添加了正确的上下文,并遵循您可以在 Udi post.
中阅读的“为任务建模,而不是为数据建模”的口头禅
还有;一般来说;隐藏东西通常会导致代码维护、测试、培训新手等的麻烦。我喜欢遵循的另一个口头禅是“永远知道你在做什么”。
我阅读了 [this][1] (dont-delete-just-dont) 文章,然后我同意不删除聚合。
我的问题是,如果我不使用 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";
...
}
...
}
有什么想法吗?
谢谢
将“软删除”建模为业务操作的一部分(而不是隐藏它)是一个很好的策略,因此我建议保持这种方式而不是将其隐藏在持久层中。使查询成为业务关注的一部分,为这些查询添加了正确的上下文,并遵循您可以在 Udi post.
中阅读的“为任务建模,而不是为数据建模”的口头禅还有;一般来说;隐藏东西通常会导致代码维护、测试、培训新手等的麻烦。我喜欢遵循的另一个口头禅是“永远知道你在做什么”。