DDD中实体之间的关系

and*_*s.k 6 php oop domain-driven-design

我是DDD的初学者,在小型简单领域工作,以便了解所有设计原则.

我有这个简单的域:institutions(Institution)和他们可用的WiFi斑点(Place)保存在数据库中.没有机构就没有地方可以存在.机构有经理user-assignee(User),它有权添加新地点,重新分配或删除现有地点.

代码可以在这里找到.对价值对象的验证暂时搁置.

这受Mathias Verraes对子实体的影响.

这是一个正确的DDD设计吗?或者至少接近它?

作为一个以数据为中心的程序员,我仍然想知道如果经验法则通过聚合根访问聚合,我将如何列出所有机构的所有位置?

生成Uuid内部的想法本身(Place::create)好吗?

是否只有受让人(User)可以添加/删除地点的想法应该在域本身上表达,还是应该由客户负责?在这种情况下,如果受让人知道他的管理机构(institutionIdUser?),那将是明智的.

是不是Institution::placeById破坏了DDD的任何原则?也许这是存储库的责任?

Chr*_*sen 2

聚合根规则仅适用于写入端。如果有专用的读取模型,这个问题就会消失。您应该可以自由地投影和读取适合您的用户场景的模型。

否则,您可以将机构中的所有地点添加到哈希集并返回扁平列表。

在设计聚合根时,请考虑更新场景。地点可以独立于机构更新吗?如果是。那么它可能是它自己的聚合根。

通常存储库应该确定下一个 ID。

通过包含权限列表的角色表达用户权限。在每个方法中传递发送者并检查方法内的访问权限。这也可以轻松测试访问权限。