Подтвердить что ты не робот

Что делает фреймворк "истинным" MVC-каркасом?

При чтении онлайн-дискуссий о инфраструктурах MVC я слышу много комментариев о проектах PHP, таких как Cake, Code Igniter и Symfony от разработчиков Java/.NET, в духе "это умные хаки, но не истинный MVC".

Итак, что делает что-то "истинным" MVC-каркасом; то есть пример платформы .NET или Java MVC, которая делает вещи иначе, чем Cake, Code Igniter, Symfony и т.д., и что это за разные вещи? Это просто отсутствие PHP для принудительной ориентации объекта, требующей бутстрапа, или это что-то еще?

Я знаю, почему PHP язык "отстой", меня больше интересуют различия в реализации и/или использовании MVC.

4b9b3361

Ответ 1

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

Многие фреймворки PHP пытаются использовать философию Ruby on Rails для "упрямого программного обеспечения", поэтому правильное функционирование Модели и представления вместе требует, чтобы оба они соответствовали определенной реализации. То есть классы должны быть названы определенным образом, файлы в проекте должны быть организованы в соответствии с определенной структурой каталогов, нотация в сценариях просмотра должна следовать за соглашением и т.д.

Это затрудняет замену различных реализаций каждого уровня независимо друг от друга, и это противоречит объекту MVC для развязывания уровней между собой.

Ответ 2

Вы можете найти эту страницу вики полезно.

Ответ 3

Истинная структура MVC не имеет слоя M (odel). CakePHP и друзья имеют некоторые умные классы для доступа к базе данных, которую они называют Model, оставляя большую часть обработки данных контроллеру.

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

Ответ 4

Вот несколько вопросов, которые могут помочь вам узнать, хороша ли и правильна ли ваша структура.

"Могу ли я запускать модульные тесты для своих классов MVC без рамки?"

И это применимо, даже если вы не пишете unit test.

Вы должны иметь возможность писать код, связанный с MVC, независимо от рамки. Когда приложение получает некоторый ввод из фреймворка, оно должно быть как объекты с известными интерфейсами, без конкретных классов.

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

"Он работает на магию и волшебную пыль?"

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

Это очень сложно сделать, если "вещь только произойдет". Обычно это указывает на глобальное состояние в коде кода. Либо в виде статических методов, либо глобальных/статических переменных.

"В какой момент мой код срабатывает?"

Вы можете найти, где и как вы управляете контроллером? Обычно это не так просто. Этот мистический пункт, как правило, глубоко в объектном графе. Иногда даже в расширенном классе.

Такая ситуация очень затрудняет изменение среды, в которой был выполнен контроллер. Он также вводит строгие правила того, как должны выглядеть ваши методы контроллера.

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

"Он/она должен был это сделать?"

Аутентификация авторизации может показаться отдельным аспектом разработки, но на самом деле в контексте MVC она имеет тенденцию быть несколько сложной.

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

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

Что это значит, так это. Для любой структуры он не должен требовать перезаписывать каждый контроллер только для добавления функций входа. Даже если вы игнорируете нарушение OCP, это просто добавляет еще один риск для вас, чтобы случайно что-то забыть.

.. мои два цента

Ответ 5

Cake и большинство фреймворков MVC - это то, что вы можете назвать MVC "Пассивный просмотр". Вот замечательная статья, объясняющая: http://www.martinfowler.com/eaaDev/PassiveScreen.html

Ответ 6

Иногда людям нужно отступать и смотреть на "каркасы" реальной жизни, от которых получил цифровой мир. Это могло бы помочь объяснить это, несмотря на бесконечные онлайн-варианты, искажающие слово, чтобы соответствовать личным повесткам дня и принижать другие системы.

Структура должна помочь вам во всех областях вашей работы.

Итак, если у вас есть только одна страница портфолио, тогда вам нужен только крошечный набор инструментов. Если вы начнете следующий Facebook, то ваш "каркас" будет значительно отличаться.

Ответ 7

Структура, как следует из ее названия, предназначена для поддержки структур - в данном случае вашего приложения. Обычная (и печальная) вещь, касающаяся большинства фреймворков, которые вы увидите вокруг, заключается в том, что они сами создают сами структуры, диктуя свой собственный способ разделения бизнес-логики, представления, маршрутизации/управления. Вы увидите код приложения, который выглядит так, как будто вам нужна целая команда, чтобы поддерживать то, что вы написали год назад. Похоже, что целью является богатство функций в рамках. Нет, нет. Это о предоставлении свободе программисту самому решать, какие компоненты приложения должны быть разделены и где должно быть разделение - до тех пор, пока задача может быть распределена между рабочей группой людей, обладающих собственным опытом.

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

Ответ 8

JavaServer Faces - довольно хорошая полная структура стека для MVC. Он имеет хорошие компоненты View, хорошие контроллеры с управляемым beans, а для модели вы можете создавать бизнес-классы.