我正在寻找有关如何解决以下设计问题的建议(使用基于 stackoverflow 的虚构示例)。我试图避免一个贫乏的领域模型,并为这种类型的案例寻求一般的“最佳实践”建议。
设想:
假设正在为 stackoverflow 开发一个新功能,只要他/她的问题收到 10 个赞成票,就会向问题的所有者发送电子邮件通知。
域对象模型是这样的:
public class Question
{
string Question { get; set; }
IList<Votes> Upvotes { get; set; }
User Owner { get; set; }
public void AddUpvote(Vote upvote)
{
Upvotes.Add(upvote);
}
}
潜在的实现:
更改
AddUpvote()
以获取IEmailerService
参数并执行AddUpvote()
方法内的逻辑。public void AddUpvote(Vote upvote, IEmailerService emailer) { Upvotes.Add(upvote); if ( Upvotes.Count == 10 ) { emailer.Send(Owner.EmailAddr); } }
在内部检测此状态
AddUpvote()
并AddUpvote()
从 IoC 容器解析 IEmailService(而不是将 IEmailerService 作为参数传递)。在调用 的外部服务对象中检测此状态
question.AddUpvote()
。public void UpvoteClickHandler(Question question) { question.AddUpvote(new Upvote()); if ( question.Upvotes.Count == 10 ) { _emailer.Send(question.Owner.EmailAddr); } }
你更好的解决方案在这里!