我有一个常见的场景,我正在寻找一些有DDD和域建模经验的人的指导.
假设我开始构建一个博客引擎,第一个要求是在发布文章后,用户可以开始在其上发布评论.这开始很好,并导致以下设计:
public class Article
{
public int Id { get; set; }
public void AddComment(Comment comment)
{
// Add Comment
}
}
Run Code Online (Sandbox Code Playgroud)
我的MVC控制器设计如下:
public class ArticleController
{
private readonly IRepository _repository;
public ArticleController(IRepository repository)
{
_repository = repository;
}
public void AddComment(int articleId, Comment comment)
{
var article = _repository.Get<Article>(articleId);
article.AddComment(comment);
_repository.Save(article);
return RedirectToAction("Index");
}
}
Run Code Online (Sandbox Code Playgroud)
现在一切正常,它符合要求.下一次迭代我们得到一个要求,即每次发布评论时,博客作者都应该收到一封电子邮件通知他.
在这一点上,我有两个我能想到的选择.1)修改文章以要求IEmailService(在ctor?中)或从静态引用到我的DI容器获取EmailService
1a)看起来很难看.我相信它破坏了我的实体知道服务的一些域模型规则?
public class Article
{
private readonly IEmailService _emailService;
public Article(IEmailService emailService)
{
_emailService = emailService;
}
public void AddComment(Comment comment) …Run Code Online (Sandbox Code Playgroud)