Это вопрос MVC.
Вот ситуация:
- Я пишу приложение, в котором у меня есть «группы».
- Чтобы пригласить других людей в свои группы, введите их адрес электронной почты и нажмите «пригласить».
- Существует два способа вызова этой функциональности: а) веб-интерфейс и б) API
- После того, как отправка почты завершена, я хочу сообщить пользователю, какие письма были успешно отправлены (то есть, если отправка SMTP прошла успешно. В настоящее время я не заинтересован в сообщении о возврате почты). *
Итак, я думаю, как мне проектировать, чтобы не было дублирования кода. То есть API и веб-интерфейс должны разделять основную часть кода.
Для этого я могу создать метод "пригласить" внутри модели "группа". Итак, API и веб-интерфейс могут просто вызывать:
группы-> приглашать ($ адресов электронной);
Этот метод может отправлять электронные письма. Но проблема в том, что мне нужно получить доступ к почтовым шаблонам, создать представления для писем, а затем отправлять письма. Который на самом деле должен быть в части «Просмотр» или, по крайней мере, в части «Контроллер».
Какой самый элегантный дизайн в этой ситуации?
Примечание: я действительно думаю написать это в Модели. Мое единственное сомнение: раньше я думал об отправке почты также как «презентация». Так как это может рассматриваться как другая форма генерирования продукции.
Добавлено после редактирования
Я понимаю, что просмотр не обязательно должен выводиться в браузер. И в этом мое сомнение. Теперь проблема, скажем, в моем приложении есть «список задач». Мы можем назначить задачу для некоторых людей. Теперь метод assignTo можно вызывать в двух ситуациях: 1) при создании задачи 2) переназначить задачу кому-либо еще.
В обоих случаях новый уполномоченный должен получить уведомление по электронной почте. Таким образом, если метод «assignTo» не отправляет почту, мы должны продублировать почтовую часть в двух местах: «задача создать контроллер» и «задача переназначить контроллер».
Я хотел избежать этого дублирования.