匯總模式是域驅動設計(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中文網其他相關文章!