domain-driven-design - DDD : Model local identity inside agregate root

标签 domain-driven-design entity local identity

阅读蓝皮书(Eric Evan 的领域驱动设计)并开始在类似应用程序的简单博客中应用 DDD 概念后,我有以下问题,如何在聚合根内对实体的本地身份建模?

为了简单起见,我有一个简单的博客模型,它具有以下实体和场景: 注册用户可以发布帖子,帖子可以关联一个或多个标签,注册或未注册用户可以对帖子发表评论。

在这种情况下,实体是 User、Post 和 Comment,聚合根是 User na Post being comment 是 Post 聚合根内的聚合。

既然评论实体在 Post 中有一个本地标识,我该如何建模它的本地标识? IE。我不能仅仅通过它的属性来区分评论,因为我可以对同一用户发布的具有相同内容的同一帖子有不同的评论...

我首先想到的是帖子评论列表中评论的顺序来标识帖子中的评论,但这在并发环境中变得非常复杂,就像一个 Web 应用程序,两个客户端可以在博客上发表评论,我会碰撞,直到我将它们存储在数据库中。除此之外,我需要保持从存储库恢复评论列表的逻辑,其顺序与帖子保存到存储库的顺序相同......

然后在 Post 中有一个唯一的标识符计数器,并随着每条评论的发布自动增加它,但在并发环境中变得复杂,那么我如何在聚合根中建模本地标识?

谢谢 巴勃罗

最佳答案

好问题。来自 Eric Evan's书:

ENTITIES inside the boundary have local identity, unique only within the AGGREGATE.

...only AGGREGATE roots can be obtained directly with database queries. All other objects must be found by traversal of associations.

我认为第二部分很重要。您应该对待 Comment Id 作为本地标识。换句话说,您不应该绕过其聚合根(帖子)检索评论,从外部引用评论等。从技术上讲,Commend Id 可以是数据库生成的相同 AUTOINCREMENT 字段,就像您对 User 和 Post(或任何其他 id来自休眠的生成器)。但从概念上讲,评论将具有本地身份。解决它是聚合根的工作。

关于domain-driven-design - DDD : Model local identity inside agregate root,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7559609/

相关文章:

php - Symfony2 子表单事件传播

python - 通过从旧列表复制来创建新列表

repository - DDD 中的存储库应该返回什么

akka - 需要 DB 调用的 CQRS 命令验证

entity - 为什么编程文本总是使用 "Employee"实体?

R 相当于 Stata 本地或全局宏

php - 如何用PHP调用本地网页

unit-testing - UNIT 测试 dto 和域对象

domain-driven-design - 加载 List 或 DropdownList 中的 Value 对象,DDD

iphone - 将核心数据应用到现有的 iPhone 项目中