汇总模式是域驱动设计(DDD)的基石,对于维持数据一致性和在对象集合中执行业务规则至关重要。 本文探讨了使用Laravel的雄辩ORM(一种主动记录模式)实现聚集体的复杂性。
建筑最佳实践倡导将域模型与基础设施关注分开。 然而,主动记录本质(包装数据库行)紧密地将模型与持久性相结合,可能导致复杂而有缺陷的设计。钥匙要点:
汇总是DDD的核心,通过将对象分组为一个由骨料根控制的单个单元来确保一致性。外部相互作用仅通过此根。
聚集体是一个充当单个单元的对象群,其中一个对象将其指定为聚合根。 所有外部互动都必须穿过根部,该根源管理对象在其边界内的一致性。 骨料边界定义了交易范围;每个交易只能投入一个骨料。 更改其他骨料需要最终的一致性。>
>沃恩·弗农(Vaughn Vernon
在一致性边界内保护不变性。
仅通过身份引用其他聚合。
>保留在边界之外,由ID引用。 是汇总的实体。 过大的聚集体影响性能;保持它们的小且定义明确。
简化的Post
类(没有雄辩):Title
Copy
Author
>集成雄辩:Comment
Post
现在,让我们加入雄辩:
Post
雄辩通过内部管理属性来简化代码。 但是,这将重点从行为转移到数据,可能导致贫血领域模型。
<code class="language-php">final class Post { // ... properties and methods ... public function comment(Message $message) { if ($this->locked->isLocked()) { throw new PostIsLocked; } // ... add comment ... } }</code>
解决挑战:
结论:
> 在上面的修订响应中,提供的常见问题解答充分解决。 将聚集物,价值对象,突变器和与雄辩一起使用它们的挑战的解释被整合到主要文本中,以提高流动和清晰度。
以上是用雄辩建模汇总的详细内容。更多信息请关注PHP中文网其他相关文章!