AlkatraZ, очень кривая картинка. Глядя на неё, складывается впечатление, что модель формирует вьюху и наполняет её данными, хотя этим занимается контроллер.
AlkatraZ, очень кривая картинка. Глядя на неё, складывается впечатление, что модель формирует вьюху и наполняет её данными, хотя этим занимается контроллер.
EclairElephant (18.05.2013 / 22:42)На многих форумах поднимали данный вопрос, но ответ дал сам автор этой архитектуры еще в 1978 году. Вот оригинал: http://heim.ifi.uio.no/~trygve ... .html
Так, а теперь возникает вопрос: - кому верить?
Можно узнать, откуда получена информация о том что это не патерн?
Первое, что Вам стоит посмотреть это список паттернов в этой книге.
У меня это главы 3, 4, 5 - стр. 89-332.
Попытайтесь найти там паттерн MVC.
Хочу сразу огорчить Вас... его там нет.
Почему нет? Потому что книжка называется "Приемы объектно-ориентированного проектирования"
И авторы этой книги достаточно компетентны, чтобы понимать, что MVC сам по себе таким (объектно-ориентированным) приемом (паттерном) не является.
L!MP (18.05.2013 / 23:02)А во и нет.
AlkatraZ, очень кривая картинка. Глядя на неё, складывается впечатление, что модель формирует вьюху и наполняет её данными, хотя этим занимается контроллер.
В оригинальной концепции была описана сама идея и роль каждого из элементов: модели, представления и контроллера. Но связи между ними были описаны без конкретизации. Кроме того, различали две основные модификации:
Пассивная модель — модель не имеет никаких способов воздействовать на представление или контроллер, и используется ими в качестве источника данных для отображения. Все изменения модели отслеживаются контроллером и он же отвечает за перерисовку представления, если это необходимо. Такая модель чаще используется в структурном программировании, так как в этом случае модель представляет просто структуру данных, без методов их обрабатывающих.
Активная модель — модель оповещает представление о том, что в ней произошли изменения, а представления, которые заинтересованы в оповещении, подписываются на эти сообщения. Это позволяет сохранить независимость модели как от контроллера, так и от представления.
Классической реализацией концепции MVC принято считать версию именно с активной моделью.
Ну далее, а то мы отвлеклись ![]()
Итак, мы собирались сделать простейший и причем рабочий скрипт, который полностью отвечает архитектуре MVC
---
Далее вопрос, для этого обязательно использовать классы и изучать ООП?
Ну ООП то знать полезно, но MVC != ООП.
Объектный подход - это всего лишь один из методов реализации архитектуры MVC.
как например гастивуху можно написать чисто в столбик, процедурным методом, так и на ООП, и даже по модной архитектуре MVC.
AlkatraZ, нужно же обращать внимание на контекст. MVC было придуманно не для веб-программирования (это да же исходя из дат, которые были уже написаны, понятно).
В веб-программинге активно используется именно пассивная модель. Т.е модель ничего не знает ни о контроллере, ни о вьюхе.
В этом и вся суть. Это делает модели свободно переносимыми и даёт возможность их повторного использования, что, в свою очередь, очень удобно, ибо модель - это вся бизнес логика приложения.
--
Йоп, когда в теме появится код? ![]()
L!MP (18.05.2013 / 23:28)Я с тобой согласен, более того, потом я напишу свои соображения по этой теме.
AlkatraZ, нужно же обращать внимание на контекст. MVC было придуманно не для веб-программирования (это да же исходя из дат, которые были уже написаны, понятно).
В веб-программинге активно использу
Итак, хорош теории, давайте перейдем к примерам.
Итак, для начала, на Денвере или Опенсервере создаем папку для наших экспериментов и назовем ее к примеру /mvc
В ней создадим 3 пустых файла:
index.php (это наш контроллер, но для удобства мы его назовем не controller.php а именно index.php чтоб легче было обращаться через браузер)
model.php
view.php
Далее, создадим нашу модель.
обычно модели работают с базами данных, но мы для простоты эксперимента поместим в нее простой массив.
Наш суперскрипт будет выдавать имена наших домашних животных. посему в файл model.php помещаем следующий код:
<?php
$data = array(
'dog' => 'Цобако: Шарик',
'cat' => 'Котейко: Барсик'
);Теперь создадим наш View
Для этого в файл view.php добавляем следующий код:
<?php
echo (isset($content) ? $content : '');Теперь займемся нашим контроллером.
как мы уже знаем, есть 2 концепции построения, с активной и с пассивной моделью.
давайте для начала сделаем контроллер с активной моделью. точно по картинке, что публиковаласть в теме выше и что есть в Википедии. то есть канонически.
---
Итак, прежде, чем писать контроллер, мы должны написать техзадание для нашего суперпроекта.
Техзадание таково:
1) По умолчанию, если зайдем на сайт, должно выводиться приветствие
2) Если я передам URL параметр act=cat должно быть показано имя моего кота
3) Если я передам URL параметр act=dog должно быть показано имя моей цобаки