Класс «Электронная почта» принадлежит модели или представлению? - PullRequest
2 голосов
/ 30 ноября 2009

У меня есть класс User в модели, и мне необходимо отправить электронное письмо с напоминанием пароля.

  • Контроллер создает экземпляр User и передает его (точнее, значения из него) классу Email в представлении? В таком случае, будет ли контроллер тогда осуществлять фактическую отправку электронного письма?
  • Или контроллер вызовет User::sendEmail(), и даже не будет представление электронной почты (а User делает отправку)?
  • Или существует другой класс модели для Email, который обрабатывает отправку, и it предоставляется представлению Email?

Или я полностью потерялся? ; -)

Спасибо за любую помощь, которую вы можете оказать мне!

Ответы [ 4 ]

4 голосов
/ 30 ноября 2009

Если вы не создаете систему обмена сообщениями, электронная почта скорее будет ресурсом, чем частью основного домена. Вы можете относиться к ним как к любому другому виду ресурсов, такому как доступ к базе данных, ведение журнала и т. Д.

Лично я бы выделил его как MessagingService, чтобы избежать слишком тесной связи с электронными письмами, что позволит вам отправлять сообщения по другим каналам в будущем, если это уместно. Контроллеру потребуется внедренный MessagingService и отослать сообщение.

Единственная причина для привлечения объекта пользователя может быть, если вам нужны значения от пользователя для заполнения содержимого письма, но это в основном просто преобразование данных.

1 голос
/ 30 ноября 2009

Если вы действительно хотите разбить вещи на MVC ... исходя из того, что сказал Марк Симанн.

MessageController -> выполняет отправку сообщения / электронной почты MessageModel -> сохраняет информацию для сообщения / электронной почты Нет необходимости просмотра.

Я бы просто передал информацию о пользователе непосредственно в MessageModel. Для MessageModel нет причин передавать объект User напрямую.

0 голосов
/ 30 ноября 2009

На мой взгляд, Email будет принадлежать слою отображения каркаса, который в случае концепции MVC является представлением. В конце концов, электронные письма - это еще одна опция отображения вывода запроса.

Ни Модели, ни Контроллеры не должны использоваться для создания или отображения вывода. В этом весь смысл использования шаблона проектирования, такого как MVC.

Редактировать Для уточнения; Контроллер будет инициировать отправку «выходных данных», которые будет составлять и отправлять представление - будь то электронное письмо, HTML или что-то еще, для чего был разработан этот конкретный вид - с использованием данных, собранных из модели.

0 голосов
/ 30 ноября 2009

Я бы сказал:

  1. Контроллеры делают вещи

  2. Просмотр отображения материала

  3. Должен идти в контроллере

РЕДАКТИРОВАТЬ: Как сказал мильсмей, было бы целесообразно создать контроллер для обмена сообщениями для расширения. Возможно, вы захотите в будущем отправлять свои уведомления через Twitter, IM, SMS или другим способом. Стоит строить на будущее.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...