Неправильно ли используется модель почты в MVC? - PullRequest
1 голос
/ 18 ноября 2009

Я построил модель на некоторых из моих сайтов MVC, чтобы помочь с отправкой электронной почты, обычно я делаю что-то вроде этого

$mail = new Mail_Model;
$mail->to('me@somewhere.com');
$mail->from('you@somewhere.com');
$mail->subject('hello');
$mail->body('hello how are you');
$mail->send();

Я знаю, что модель предназначена для моделирования данных - так что, я нарушаю? Должен ли это быть вспомогательный класс? Что-то вроде ...

Mail::send('me@somewhere.com', 'you@somewhere.com', 'hello', 'hello how are you');

Этот второй мне тоже не читается ... конечно, я мог бы передать массив с именованными ключами, чтобы сделать его более читабельным.

Так моя модель Mail нарушает то, что модель должна быть в парадигме MVC?

Ответы [ 3 ]

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

, поскольку этот вопрос помечен 'kohana', возможно, вы уже знаете, что у kohana есть помощник по электронной почте , который делает именно то, что вы делаете здесь.

по сути, мой ответ таков: код для отправки электронного письма лучше подойдет в качестве помощника.

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

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

IMO, создание экземпляра объекта в этом случае, вероятно, не очень «MVC», и ваш второй пример выглядит (по крайней мере для меня) больше как строка кода, которая указывает на одноразовое действие без реальных последствий для бизнес-логики.

Но - не чувствуйте себя слишком скованным этой парадигмой! Какой из этих двух вариантов, по вашему мнению, легче читать, а другому кодировщику легче следовать позже?

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

Сними '_Model' со своего первого, и это будет иметь для меня смысл. Реализация отправки почты как единой статической функции не дает никаких преимуществ по сравнению с вызовом mail (). вы столкнетесь с такими же проблемами, пытаясь установить дополнительные заголовки, или отправите электронное письмо в формате HTML, или добавите вложения, которые дополнительные методы класса могут абстрагировать от вашего вызывающего кода.

...