Cakephp Fat Models - следует ли импортировать компоненты? - PullRequest
1 голос
/ 01 июля 2010

Позвольте мне в предисловии сказать, что это первый живой проект CakePHP для меня.

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

Например, я хочу отправить уведомление по электронной почте после регистрации пользователя.Я переместил свою функцию электронной почты в модель, но теперь должен импортировать компонент Email в модель.

Так что ради пары строк кода (исключая строки для самого сообщения) япридется импортировать компонент, который уже может быть использован и в контроллере (но не в этом конкретном случае).

Кажется, торт на самом деле не "устроен" для концепции Fat Model?

Ответы [ 3 ]

3 голосов
/ 01 июля 2010

Не отправляйте электронные письма от модели! Есть причина, по которой EmailComponent является компонентом, а не поведением. Модели о моделировании ваших данных. Отправка электронной почты не имеет ничего общего с моделированием данных, она касается взаимодействия с реальным миром, то есть вывода, поэтому процесс состоит из компонентов и файлов просмотра.

Если что-то в вашей структуре MVC кажется действительно неуклюжим и странным, вы, вероятно, делаете это неправильно.

2 голосов
/ 01 июля 2010

Это ваш первый проект, так что не беспокойтесь о слепом следовании «лучшим практикам».Помните, что контроллер существует по какой-то причине - это не просто пустая начинка в сэндвиче на пороге.

Как только вы приступите к работе, вы можете просмотреть и настроить свое сердце и начать понимать, почему выВозможно, вы захотите переместить логику в (или из) модель.

В самом широком смысле Модель - это интерфейс приложения с базой данных.По моему мнению, выходные данные модели должны быть данными, чистыми (из базы данных) или измененными, и ничего более.

Контроллер что-то делает с данными.

Представление отображает выходные данные контроллера.

2 голосов
/ 01 июля 2010

Концепция "толстой модели" не означает, что весь код должен быть перемещен в модель, как я уверен, вы уже знаете. В этом случае команда Cake может привести аргумент - я думаю, правильно - что отправка электронной почты является функцией логики application , а не логики business . Если вы примете это предположение, то все функции, связанные с почтой или обменом сообщениями, будут находиться в контроллере, где доступны компоненты.

Я всегда стараюсь думать об этом так:

Если бы я создавал API в своем приложении, я бы хотел повторно использовать всю логику business , но практически не использовать логику application . Если кто-то выполняет действия против моего приложения через API, мое приложение, как правило, не несет ответственности за отправку электронного письма непосредственно клиенту. Он / она не знает, что он / она использует мое приложение, поскольку к нему обращаются из внешнего источника. Лучшее решение состоит в том, чтобы выполнить бизнес-логику, а затем, в зависимости от ее возможности, заставить контроллер (логику приложения) отправить электронное письмо.

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

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