1

我目前正在試圖發現背後總根及其對存儲庫關係的想法。總根與庫

給出的是以下域實體:

public class Country { 

    public string Name { get; set; } 
    public ICollection<City> Cities { get; set; } 

} 

public class City { 

    public string Name { get; set; } 

} 

我想我在我的域名正確識別國家作爲聚合根因爲,不應該是任何城市不在一個國家內。應該只能通過一個國家向數據存儲添加一個新的城市,如果一個國家被刪除,每個城市的內部也應該被刪除。

現在,請問這樣的國家儲備庫可能是什麼樣子?以及如何在國家聚合根樣子的?是否有一個CityRepository區域內部(這將讓我的城市添加到即使沒有相關的國家數據庫!)?而且是有CountryRepository國家(不知國家需要來填充它的城市嗎?或者這是一個倉庫的工作嗎?)

回答

3

我認爲你有它的竅門。在你描述的情況下:

因爲在我的域名中,不應該有任何城市不在 國家內。應該只能通過一個國家,如果一個新的城市加入到 數據存儲一國獲取的已刪除,每個城市 內應去除過多

你是正確的,是全國的總根源。你的國家實體代碼是聚合根,它是正確的!你不會想要一個城市回購。貴國的回購並不真正依賴於相關的值對象(在這種情況下,市)或實體的變化,所以在這種情況下,你基本的CRUD API會是什麼樣子:

public class CountryRepo { 
    public Country GetCountry(String name); 
    public Country SaveCourntry(Country country); 
    public void DeleteCourntry(Country country); 
    ...etc... 
} 

要在你的最後一個問題摸:

,並有國家(不知何故 國家需要來填充它的城市嗎?或者這是一個 庫的工作?)

您的存儲庫將內部CountryRepository照顧活動(處理你的實體)。填充城市將通過維護收藏在實體中完成。你可能會使您所在的國家實體的方法來添加城市:

public void AddCity(City city) 
{ 
    this.Cities.Add(city); 
} 

刪除有異曲同工之處,然後你用你的回購保存應採取持續的城市的相關集合照顧的國家。

1

聚合根的選擇是不分層數據僅基於內部關係。如果您的應用程序可以直接訪問城市,進行城市運行,而無需使用全國(除,當然,添加和刪除你提到的操作),那麼國家是不是城市的總根源。