Паттерн MVC и всё, что с ним связано

BobiKK

Новичок
Паттерн MVC и всё, что с ним связано

Хочется написать что-то, применяя паттерн model-view-controller. Однако, кой-чего я не понимаю.
Допустим, имеется контроллер news, который берет данные из БД, присвает соответствущие значения в шаблоне и выдает их клиенту. Выдает, скажем, список новостей. Однако, помимо этого на сайте должны быть навигационные меню, меню пользователя, блоки рекламы и прочее. Всё формируется из БД. Т.е., мне не достаточно подключить в контроллере ещё несколько шаблонов, мне надо сделать с ними ещё определенные действия. В одном контроллере я могу это всё реализовать. Но будет-то несколько контроллеров, а код формирования всяких менюшек похож.
Вопрос: как это реализовать, чтобы сохранилась логика MVC?
 

Sam

Новичок
есь много подходов. посмотри как это реализовано в известных фреймфорках - rails, cakephp, phpmvc и т.д
 

BobiKK

Новичок
Ну, я пытался поработать с Zend Framework. Вся документация, которая есть, мануалы и прочее, тему эту не расскрывает. В контроллерах просто идет подключение шаблона меню, где уже статически вбиты ссылки.
 

Alexandre

PHPПенсионер
BobiKK Паттерн MVC - это парадигма, реализована она в каждом фреймворке по разному. В качестве контроллера, можно вообще использовать mod_rewrite

функция контролера - определить какая будет использоваться Модель, и передать ей исходные данные
Функция модели - бизнес логика блока
Функция view - отображение бизнес логики

-~{}~ 13.10.06 17:40:

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

Есть Модель (класс), которая отвечает за бизнес-логику, т.е. отображение части контента сайта, результатов голосования на сайте, информации о погоде, блока собств. новостей, новостей из RSS....

Каждая модель вызывает свой View, который формирует выходной HTML

далее контролер собирает все результаты от отработки всех локальных View и выдает их через общий View в выходной поток.

где-то так.
 

BobiKK

Новичок
А для отображения страницы может использоваться 2 контроллера? Ну и соответсвенно, 2 модели и 2 view's
 

Alexandre

PHPПенсионер
А для отображения страницы может использоваться 2 контроллера? Ну и соответсвенно, 2 модели и 2 view's
ну не совсем так... хотя все зависит от архитектуры
у меня контроллер один, на то он и контроллер, чтоб все контроллировать.
моделей много...
представлений - по одной на модель + одно представление - общее
 

master_x

Pitavale XXI wieku
Alexandre
В качестве контроллера, можно вообще использовать mod_rewrite
случайно с Router не путаете? можно конечно и рутинг и контроллер объеденить в одно целое...

BobiKK
А для отображения страницы может использоваться 2 контроллера? Ну и соответсвенно, 2 модели и 2 view's
сколько угодно, все зависит от нужд приложения.

Alexandre
у меня контроллер один, на то он и контроллер, чтоб все контроллировать.
моделей много...
это как бы FrontController он один, да а вот остальных контроллеров может быть сколько угодно.
 

BobiKK

Новичок
Спасибо больше. Я, в принципе, где-то так и думал, однако решил удостовериться, что это соотетсвтует логике MVC
 

Alexandre

PHPПенсионер
master_x я не буду затевать дискуссию, паттерн - не догма, а руководство к действию.
А в твоем понимании - это догма, ограничена реализацией конкретного фреймворка.
цитирую себя же...
MVC - это парадигма, реализована она в каждом фреймворке по разному.
 

texrdcom

Новичок
Alexandre

--------------------------------------------------------------------------------

MVC - это парадигма, реализована она в каждом фреймворке по разному.
___________________________________________________

Тогда это уже не шаблон проэктирования а сплошная абстракция :)
 

Rammstein

PHPClub::News
Мне понравилась реализация SuperAction в envos. Это, так сказать, наиболее близко мне.
Там сам экшн (ака контроллер) может запускать "под-экшены". Просто и правильно.

Взять тот же Zend Framework. На данный момент, можно определить из экшена только следующий экшн, что впринципе не удобно (ещё заморачиваться на то, чтобы простые под-экшены управляли потоком. Напр, зачем экшену вывода меню знать, что после него должен выполниться экшен сбора статистики???)... Другое дело, когда можно было бы определить цепочку... но пока только один экшен.
 

Alexandre

PHPПенсионер
Тогда это уже не шаблон проэктирования а сплошная абстракция
абстракция - необходима для реализации конкретного, но с меньшими издержками.
Именно абстракция помогает нам правильно проектировать код! абстракция - это основа ООП.

Хочу заметить, что в классическом понисмании шаблон - это набор типовых решений (абстракций), и в конкретно применимом случае - реализации могут отличаться.

По этому главно не слепое применение классов View, Model, Controller - а понимание самой идеалогии MVC.
Я знаком с 5ю разными MVC-фреймворками, и в них разные абстрактные MVC конструкции классов. Но при этом сама MVC модель остается.

Разруха не в стране, а прежде всего в умах.
Профф. Преображенский
 
Сверху