不会这一实体存储库的服务,例如融入领域驱动的设计?
-
19-08-2019 - |
题
我想知道如果你找到以下模式有意义的领域驱动的设计。
域层的模型和知识库。在应用层包括服务,处理的查询的用户接口,或从控制器,模型中的视器模式。
详细的结构:
// Assembly Model: public class Phrase { public int PhraseId { get; 私 set; } public string PhraseText { get; 私 set; } 公众的短语(string phraseText){这一点。PhraseText=phraseText;} 公共无效SetId(国内){这一点。内=内;} } // Assembly Repository (references assembly Model): public interface IPhraseRepository { Phrase SavePhrase(那句短语); 短语GetPhrase(国内); } // Assembly Services (references assemblies Model and Repository): public class PhraseService { private IPhraseRepository _phraseRepository; public PhraseService(IPhraseRepository phraseRepository) { _phraseRepository = phraseRepository; } public Phrase SavePhrase(string phraseText) { Phrase phrase = _phraseRepository.SavePhrase(新短语(phraseText)); // doing other things like sending mail, logging, etc. // ... return Phrase; } }
特别是,它会做出有意义的举动的方法进入该短语的实体类?在这种情况下,怎么会叫?
编辑:
例如上文已经修改后的答案,从moffdub和评论从迪尔Ansari.更改 强调.
我想问一下有关加入IPhraseRepository.GetPhrase(内的)和如何将包括吗?
解决方案
储存库应采取一短语,不一串。我也不知道为什么SavePhrase方法返回的短语。我倾向于使这些方法无效的方法。
此外,警惕使每一个酒店在你领域模型有公共吸气,并制定者。这可能会导致你有贫血的领域模型。
其他提示
只是一些想法:
SetId(国内)不应该被公开
短语可能实现IPhrase(或IPhraseAggregate)这不会让SetId(..)
SavePhrase(短语句话)可能会(应该吗?) 回无效的,如果所参照的实体的短语保持"有效的"后节省:
public void SavePhrase(string phraseText)
{
Phrase phrase = new Phrase(phraseText); // NOTE: keep a reference to phrase
this._phraseRepository.SavePhrase(phrase); // NOTE: returns void
return phrase; // NOTE: assume the repository sets the phrase.PhraseId
}
不隶属于 StackOverflow