例如,考慮具有多個菜單的商店。菜單列表項和一個項目可以在多個菜單中列出。聚合根的孩子如何使用來自另一個聚合根的值
想象一個Menu聚合根和Item聚合根。一個菜單將有一個MenuItem的集合,它引用一個Item AR以及特定菜單中的訂購信息。
我的問題是,你將如何從MenuItem訪問項目的名稱,價格,描述。舉個例子,菜單AR處理一個命令,通過價格重新排序(我知道這聽起來與UI相關,但是我在這裏嚴格地講域模型,idk也許這是一個商業規則,菜單必須在特定的方式?)
你會得到一個價值對象的項目AR內的MenuItem?如果是這樣,菜單AR是否保存對域服務的引用以查找該Item的值對象,或者MenuItem是否使用域服務。
我想,菜單AR應始終保持一致,這可能意味着當一個項目被添加到菜單時,MenuItem持有對該項目的值對象的引用。
這樣的聲音會破壞'參考實體的身份'規則,所以MenuItem將持有對ItemId的引用。考慮使用事件採購,無論何時您想要對菜單AR應用命令,它都會重播所有事件使其保持一致,然後發出重新排序菜單項目的命令。
MenuItem只會有一個ItemId而不是該項目的細節,這是否是加載這些項目的時間? Menu可以遍歷它的MenuItems,然後使用服務通過ItemId爲每個MenuItem查找一個Item值對象,然後執行排序。
感謝您的任何意見,非常感謝。
非常感謝您堅持與我作爲商業規則,這只是我想到的第一件事。這有很大的幫助,我認爲你是對的,如果菜單的定價對商業條款中的菜單很重要,那麼MenuItem就可以將價格複製到自身。它只需要像你說的那樣最終保持一致,依靠「ItemPriceChanged」事件保持最新狀態。我必須做更多的研究,因爲如果Menu Menu AR聽到所有MenuItem的ItemPriceChanged事件,那麼這聽起來已經錯了,並且在重放Item時會產生副作用。 – user3228313