Оба варианта 1) и 2) выглядят как неподходящее место для отправки электронного письма. Экземпляр Вопроса не должен знать этих двух вещей:
- Он не должен знать о политике, то есть когда отправлять электронную почту.
- Он не должен знать о механизме уведомления для политики, то есть службы электронной почты.
Я знаю, что это дело вкуса, но вы тесно связываете Вопрос с политикой, а также с механизмом отправки электронной почты. Было бы очень трудно переместить этот класс Question в другой проект (например, ServerFault, который, например, является дочерним сайтом StackOverflow)
Меня интересует этот вопрос, потому что я создаю систему уведомлений для создаваемой справочной службы. Вот что я сделал в своей системе:
Создание NotificationManager (по сути, полностью перенесите проблему уведомлений в отдельный класс).
public Class NotificationManager
{
public void NotificationManager(NotificationPolicy policy, IEmailService emailer)
{
}
}
Затем я сделал что-то вроде этого (UpvoteClickHandler зависит от экземпляра NotificationManager):
public void UpvoteClickHandler(Question question)
{
question.AddUpvote(new Upvote());
_notificationManager.Notify(Trigger.UpvoteAdded, question);
}
Все, что делает UpvoteClickHandler, - это сообщает NotificationManager, что в вопрос был добавлен ответ, и позволяет NotificationManager определить, следует ли отправлять электронное письмо и каким образом.