and*_*s.k 6 php oop domain-driven-design
我是DDD的初学者,在小型简单领域工作,以便了解所有设计原则.
我有这个简单的域:institutions(Institution)和他们可用的WiFi斑点(Place)保存在数据库中.没有机构就没有地方可以存在.机构有经理user-assignee(User),它有权添加新地点,重新分配或删除现有地点.
代码可以在这里找到.对价值对象的验证暂时搁置.
这是一个正确的DDD设计吗?或者至少接近它?
作为一个以数据为中心的程序员,我仍然想知道如果经验法则通过聚合根访问聚合,我将如何列出所有机构的所有位置?
生成Uuid内部的想法本身(Place::create)好吗?
是否只有受让人(User)可以添加/删除地点的想法应该在域本身上表达,还是应该由客户负责?在这种情况下,如果受让人知道他的管理机构(institutionId在User?),那将是明智的.
是不是Institution::placeById破坏了DDD的任何原则?也许这是存储库的责任?
聚合根规则仅适用于写入端。如果有专用的读取模型,这个问题就会消失。您应该可以自由地投影和读取适合您的用户场景的模型。
否则,您可以将机构中的所有地点添加到哈希集并返回扁平列表。
在设计聚合根时,请考虑更新场景。地点可以独立于机构更新吗?如果是。那么它可能是它自己的聚合根。
通常存储库应该确定下一个 ID。
通过包含权限列表的角色表达用户权限。在每个方法中传递发送者并检查方法内的访问权限。这也可以轻松测试访问权限。