Как вы решаете, если что-то идет в поле зрения или контроллер? (Zend Framework) - PullRequest
1 голос
/ 08 октября 2008

Как вы решаете, если что-то идет в поле зрения или контроллер?

Вот несколько конкретных примеров:

  • Zend_Captcha: контроллер генерирует капчу и передает ее представлению, или представление генерирует его?
  • Zend_Alc: решает ли представление, должен ли пользователь отображать сегмент представления, или у вас есть несколько представлений в зависимости от доступных действий, и контроллер выбирает правильный для отображения?
  • Zend_Session: отслеживает ли представление, кто просматривает его, на основе данных сеанса или оно анализируется контроллером и представляется представлению как некоторый параметр?

Должны ли правила или руководства для какого компонента (модели, представления или контроллера) делать то, что написано где-то, где я могу их просматривать? Я не видел этого в документации на сайте Zend Framework.

Ответы [ 2 ]

11 голосов
/ 08 октября 2008

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

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

  2. Представления ничего не делают, кроме View Logic. Делайте все, что связано с визуальным взаимодействием с пользователем, например, генерируйте капчи, скрывайте и отображайте ссылки на основе ACL. Не рассчитывайте итоги. Не вызывайте логику на моделях. Не занимайтесь бизнес логикой. Обычно нормально читать сессию из ваших представлений, чтобы скрыть и показать данные / ссылки. Но не полагайтесь на это в целях безопасности: обеспечьте безопасность и своих контроллеров.

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

Надеюсь, это поможет.

2 голосов
/ 08 октября 2008

Для Capcha вы можете генерировать в представлении. Для Acl используйте представление. Zend_Session доступен как для контроллера, так и для вида

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