簡體   English   中英

匯總根和存儲庫

[英]Aggregate Roots & Repositories

我目前正在嘗試發現聚合根及其與存儲庫之間關系的想法。

給出以下域實體:

public class Country {

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

}

public class City {

    public string Name { get; set; }

}

我猜我正確地將國家/地區標識為城市總根 ,因為在我的域中,不應有不在國家/地區內的任何城市。 只能通過一個國家/地區將新城市添加到數據存儲中,如果刪除了一個國家/地區,則也應移除其中的每個城市。

現在,這樣的國家/地區存儲庫可能是什么樣子? 國家匯總根的外觀如何? 域內是否有CityRepository (即使沒有相關國家,這也允許我向數據庫中添加城市!)? 並且在國家內部是否存在CountryRepository (以某種方式該國家需要填充其城市?還是這是存儲庫的工作?)

我認為您掌握了它。 在您描述的情況下:

因為在我的領域內,不應有一個國家或地區以外的城市。 只能通過一個國家/地區將新城市添加到數據存儲中,如果刪除了一個國家/地區,則也應移除其中的每個城市

您是正確的,國家是總根。 您所在國家/地區的實體代碼是匯總根,它是正確的! 您不想要城市回購。 您所在國家/地區的repo並不會真正根據相關的價值對象(在這種情況下為城市)或實體而變化,因此在這種情況下,您的基本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);
}

刪除將是類似的,那么您可以使用您的存儲庫來保存國家/地區,該國家/地區應保留相關的城市集合。

聚合根的選擇並非僅基於分層數據關系。 如果您的應用程序可以直接訪問城市並在不使用國家的情況下在城市上執行操作(當然,您提到的添加和刪除操作除外),則國家不是城市的匯總根。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM