我嘗試瞭解從一個Aggregare Root填充屬性到另一個Aggregare Root的最佳方式。從一個聚合根向另一個聚合根填充更新數據的最佳方式是什麼?
我有Model Aggregate Root
,Category Aggregate Root
,Filter Aggregate Root
每個Model
可以有一些Filter
列表,並且可以在Category
之一。 Category
可以有一個Filter
繼承到Model
。當Model
的Category
屬性更新,Filter
必須從Category
繼承到Model
,當Filter
財產在Category
更新,從Category
所有Models
必須繼承新的價值。所有繼承的Filters
無法更新,但可以編輯手動添加的過濾器。
「發明」的一種方式是使用Process manager
,其狀態包含Category filter
和Models list
。
所以我纔會有這樣的行爲:
Category AR
UpdateCategoryFilter(命令) - > CategoryFilterUpdated(事件)Model AR
AddCategory(命令) - > CategoryAdded(事件),RemoveCategory(命令) - > CategoryRemoved (事件),InheritFilter(命令) - > FilterInherited(事件),RemoveInheritedFilter(命令) - > InheritedFilterRemoved(事件)Filter AR
CreateFilter(命令) - > FilterCreated(事件)- 個流程管理
FilterInheritance
有correlationIdResolver
通過categoryId
,會觸發[CategoryFilterUpdated
,CategoryUpdated
]事件
PM的行爲是這樣的:
current State(filter, models) =>
if CategoryFilterUpdated(... newFilter ...) =>
set new State(... newFilter ...) {
models.forEach(send InheritFilter(model, newFilter))
}
if CategoryAdded(.... modelId ...) =>
set new State(... models.add(modelId) ...) {
send InheritFilter(modelId, filter)
}
if CategoryRemoved(.... modelId ...) =>
set new State(... models.remove(modelId) ...) {
send RemoveInheritedFilter(modelId, filter)
}
這是一個正確的方式?有其他方法嗎?
你爲什麼稱這個代碼爲「過程管理器」?它管理的是什麼類型的流程,流程什麼時候開始,什麼時候結束? –
這是一些僞代碼。當它出現相關事件('CategoryFilterUpdated','CategoryUpdated')時,它會偵聽事件流並改變其狀態('State(filter,models)')與發送命令('InheritFilter(model,filter)') 。 –
這不是我的問題。我的問題是你的過程是什麼?那裏沒有進程,只有幾個事件處理程序。 –