【发布时间】:2009-05-29 23:22:22
【问题描述】:
我正在寻找有关如何解决以下设计问题的建议(使用基于 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); } } 这里有你更好的解决方案!
【问题讨论】:
-
感谢大家的出色回复!
标签: domain-driven-design business-logic