如果有以下代碼。DDD工廠責任
public class CountryFactory : IEntityFactory
{
private readonly IRepository<Country> countryRepository;
public CountryFactory(IRepository<Country> countryRepository)
{
this.countryRepository = countryRepository;
}
public Country CreateCountry(string name)
{
if (countryRepository.FindAll().Any(c => c.Name == name))
{
throw new ArgumentException("There is already a country with that name!");
}
return new Country(name);
}
}
從DDD方法,是創建一個Country
的正確方法。或者是否有更好的辦法來檢查一個國家是否存在,如果不存在,只需致電工廠返回一個新的實體。這意味着該服務將負責堅持實體而不是工廠。
我有點困惑,責任應該放在哪裏。特別是如果需要創建更復雜的實體,這不像創建一個國家那麼簡單。
我認爲這個問題可能來自您使用的詞彙。 * create *方法實際上是一個具有默認值的查找,如果它不存在的話...它不是真正的*創建* ...因此我覺得很難認爲它是無處不在的語言的一部分。如果不知道該實體是如何使用以及與什麼相關的,我發現很難說其他任何東西,因爲有時邏輯可能位於域服務,應用程序服務,工廠,存儲庫或只是一個*新實例*,具體取決於情況。 – Augusto
嗯,我真的需要知道將回購注入工廠是否有效/良好實踐。所有的實體是否都有製造它們的工廠?它真的下降了,我是否創建了一個基於持久化的實體,或創建實體,試着堅持它,並擔心它是否出現錯誤。 –