次の設計上の問題に取り組む方法に関する推奨事項を探しています(stackoverflowに基づく架空の例を使用)。私は貧血のドメインモデルを避け、このタイプのケースに対する一般的な「ベストプラクティス」のアドバイスを求めたいと思います。
シナリオ:
質問が10の賛成票を受け取るたびに、質問の所有者に電子メール通知を送信するstackoverflowの新機能が開発されているとします。
ドメインオブジェクトモデルは次のようなものです。
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); } }
内でこの状態を検出し、(IEmailerServiceをパラメーターとして渡す代わりに)IoCコンテナーからIEmailService
AddUpvote()
を解決します。AddUpvote()
を呼び出す外部サービスオブジェクトでこの状態を検出します
question.AddUpvote()
。public void UpvoteClickHandler(Question question) { question.AddUpvote(new Upvote()); if ( question.Upvotes.Count == 10 ) { _emailer.Send(question.Owner.EmailAddr); } }
ここであなたのより良い解決策!