Вообще на phppatterns по-моему не слишком удачный пример MVC.
Как я вижу собственно говоря разделение ролей.
Controller - управляет созданием объектов, связями между ними.
Model - хранит в себе все данные, которые нужны View. Предоставляет все необходимые методы для получения данных, в которых нуждается View. Никак не изменяет данные.
View - занимается исключительно отображением данных, которые берёт исключительно из Model. Если контроллеру нужно передать что-то в View он передаёт эти данные модели, а та уже передаёт их View.
-----------------------------------
При такой схеме мы имеет простой дизайн кода, который очень легко контроллировать и изменять. Преимущества:
1. Всегда известно куда складывать данные
2. Всегда известно откуда будут браться отображаемые данные
3. Один и тот же View может иметь в качестве источника данных несколько моделей. Модели создаются Controller'ом
4. Одна и та же модель может иметь несколько представлений - достаточно создать нужный View и передать ему нужную модель.
-~{}~ 21.08.05 03:14:
вот правильно ли с точки зрения MVC будет создать один класс-контроллер и в нем обрабатывать запрос и создавать соответствующую модель и представление?
Да - правильно.
Model и View связаны неразрывно. Model не может предоставлять меньше функций доступа к данным, чем требует View.
Т.е. допустим мы можем иметь модель
PHP:
class Model
{
function get_data_one()
{
...
}
function get_data_two()
{
...
}//class ends here
}
и два View
PHP:
class View1 extends BaseView
{
function get_template_name()
{
return 'tpl1.tpl'
}
function display()
{
$this-> assign('data1', $this-> Model-> get_data_one());
}
}//class ends here
class View2 extends BaseView
{
function get_template_name()
{
return 'tpl2.tpl'
}
function display()
{
$this-> assign('data2', $this-> Model-> get_data_two());
}
}//class ends here
И таким образом одна модель, предоставляющая широкий интерфейс для получения данных имеет два представления, которые используют не все данные.
Или же можно создать две отдельных модели - каждая из которых будет нужна только одному view - всё зависит от конкретного дизайна кода.
Ну и реально, как мне кажется лучшим дизайном MVC является тот где
1. View запрашивает данные у модели
2. Данными "кормят" модель и только модель, даже если кажется что наиболее "прямой" путь - это задать эти данные в View. Если пойти этим "прямым" путём в угоду размышлениям о производительности - это потом даст себя знать.
3. Контроллер таким образом знает решает лишь
- какой view и модель ему создавать.
- какими данными кормить модель
4. После того как модель создана, накормлена данными, создан view контроллер просто связывает - задаёт View источник данных, объект откуда брать данные. Которым является модель.
Я беру для рассмотрения некий "конечный" контроллер. Потому что все остальные вещи, которые произоводят диспетчирезацию событий контроллерами не являются - не нужно их даже называть контроллерами
. Даже совершение каких либо действий не подходит под модель MVC, с моей точки зрения.
Model-View-Controller это связка предназначенная исключительно для отображения данных/состояния системы. Обработка должна происходить до.
Можете назвать это Actioner - пусть он хранит в себе и controller и некие actions. Но MVC лишь отображает данные. Этот паттерн имеет, с моей точки зрения узкую область применения. А повсеместная его распространённость и притягивание его за уши на все случаи жизни лишь указывает на то, что среднестатистический программер знает лишь эти три волшебные буквы
--------------------------------------------------
MVC мне представляется следующим образом (грубо и аналогия далеко не полна)
- Модель - это система датчиков автомобиля
- View - это устройства визуализирущие данные о состоянии автомобиля.
- Controller - сборочный конвейер, который для нужных марок автомобиля ставит нужные наборы датчиков и для разных обивок салона ставит приборные панели разного цвета.
-~{}~ 21.08.05 03:37:
---------------------
Ну ещё одно ОЧЕНЬ ВАЖНОЕ ЗАМЕЧАНИЕ.
Для тех кому лень это всё читать или кто не понял ещё эту простую мысль.
MVC - это
1. Model
2. View
3. Controller.
Три вещи. Ещё раз повторяю - это ТРИ вещи. Если в вашем дизайне кода появляется этих вещей больше - например добавляются некие Actions - то это уже не MVC.
Потому что паттерн MVC имеет смысл лишь в пределах взаимодейтвия ТРЁХ ролей. Всего трёх.
И Controller должен знать лишь о двух других ролях и управлять лишь двумя объектами/ролями - Model и View. И ничем больше.
Проверьте свой дизайн кода - если контроллер занимается больше чем созданием View, Model и наполнением данных модели - это не MVC.
Если View занимается получением данных из внешних источников - это не MVC.
Если модель вызывает методы View - это не MVC.
Если контроллер создаёт другие контроллеры и не имеет модели или View - это не контроллер и это не MVC.