我正試圖將我的應用程序從每個實體的存儲庫重構爲每個聚合根的存儲庫。獲取所有聚合根實體子實體?
一個基本的例子是我有一個Cars的實體根。汽車有租賃合同。據我所見,沒有汽車的合同不存在,因此汽車是合計的根源。
我想實現一個用戶視圖,它將顯示系統中的每個合約(根實體的所有子實體)。在重構之前,我可以去我的合同倉庫並獲取全部。由於合同存儲庫已被刪除(因爲它不是根目錄),我現在需要將所有汽車從我的存儲庫中取出,然後獲取所有合同。
我的庫具有接口
public interface ICarRepository
{
IQueryable<Car> All { get; }
IQueryable<Car> AllIncluding(params Expression<Func<Car, object>>[] includeProperties);
Car Find(long id);
void InsertOrUpdate(Car car);
void Delete(long id);
void Save();
}
我想創建ICarManagementService和具有它具有GetAllContracts方法(或許與濾波器參數)的。這是否意味着獲得我需要的所有合同,將所有車輛實體與他們的合同一起取出,然後檢索每個實體相關的聘用合同並對其進行過濾?
然後,我可以將這些傳遞給控制器並像以前一樣自動映射合同。
這是最佳實踐嗎?
由於
格雷姆
我確實認爲我希望人們能夠鎖定「汽車」進行編輯。我可以看到僱傭合同是一個總計。我需要防止人們能夠增加重疊的聘用期。如果僱用是一個總計,我還能執行嗎? – GraemeMiller
如果不能很好地理解你的域名,很難回答這個問題。但我可以給你一個提示。 Udi Dahan和/或Greg Young提到了一種方法,您應該設法想象如何在沒有計算機的情況下在「基於紙張的」業務中實施此功能。這可能會導致更多的異步方法(允許僱傭期臨時重疊,亞馬遜允許兩個客戶訂購該書,即使只有1個庫存,然後通過電子郵件通知您)。如果您刪除「所有內容應始終保持100%一致」的限制,可以實現很多功能。 – Dmitry
稍後可能會發布更詳細的問題。我這本藍皮書的副本應該在本週到達,所以希望我能更好地掌握良好的DDD練習。謝謝您的幫助。 – GraemeMiller