如果有以下代码。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
嗯,我真的需要知道将回购注入工厂是否有效/良好实践。所有的实体是否都有制造它们的工厂?它真的下降了,我是否创建了一个基于持久化的实体,或创建实体,试着坚持它,并担心它是否出现错误。 –