Почему PHP-разработчики думают, что MVC – это архитектура приложения?

Ранее я указывал на то, что Model-View-Controller представляет собой паттерн пользовательского интерфейса, а не архитектуру приложения. Но откуда у PHP-разработчиков возникла идея, что MVC – это в первую очередь архитектура? (Это можно сказать обо всех разработчиках серверной части, не только о PHP)

Я одно время думал, что MVC — это архитектура. Даже после прочтения «Каталога шаблонов корпоративных приложений» Фаулера и, несмотря на то, что MVC предназначался для пользовательского интерфейса, я полагал, что всё правильно понял и делаю «приложение пользовательского интерфейса». Но это было не совсем так; правильнее было бы сказать, что я смешивал проблемы пользовательского интерфейса с основой ядра приложения.

Основываясь на данном опыте, я думаю, что причина, почему MVC ошибочно принимают за архитектуру приложения, заключается в том, что PHP-разработчики обычно начинают с скриптов страниц. В наших первых скриптах страниц мы объединяем все проблемы в одном единственном грязном комочке: запросы SQL смешиваются с HTML и бизнес-логика рассеяна повсюду. Насколько нам известно, сам по себе скрипт страницы является «приложением». Позже, поскольку потребуется больше функциональности, мы добавим другой скрипт страницы, и другой, и другой. Мы по-прежнему видим эту коллекцию скриптов как «приложение».

Далее, прогрессируя в нашей профессии, и начиная изучать, как лучше организовать работу, мы начинаем разделять различные проблемы «приложения». Когда мы начинаем разделять проблемы, мы отделяем их от скрипта страницы, рассматриваемого как «приложение». Извлечение проблем представления из скрипта означает извлечение из «приложения». Отделение модели от скрипта в собственный слой означает отделение его от «приложения». Вытаскивание логики контроллера из скрипта означает вытаскивание его из «приложения». И, конечно же, так Model-View-Controller выглядит как архитектура приложения – мы отделили проблемы нашего приложения согласно этому паттерну, всё верно?

Вовсе нет. Один из самых больших шагов, которые мы должны сделать — это понять, что MVC предназначен для конкретной части наших систем под названием пользовательский интерфейс. Мы со стороны сервера думаем, что пользовательский интерфейс – это HTML, CSS и JavaScript. Но это не так. Наш пользовательский интерфейс – это HTTP Запрос и Ответ. Другими словами, шаблон (template) – это не Представление.

Как только мы делаем этот концептуальный прыжок, мы начинаем понимать, что слой Модели – это точка входа «приложения». То место, где «приложение» должно жить, ну или, по крайней мере, создавать впечатление, что живёт. Контроллер должен мало что делать, принимать входные данные из Запроса и передавать их в Модель; аналогично, Представление не должно ничего делать, кроме объединения ответов из выхода Модели.

С этой идеей о серверной стороне MVC, мы начинаем видеть, что в серверных MVC фреймворках «слишком много» всяких штук. Функциональность фреймворка, которая не связана с простым получением входных данных из Запроса и представлением вывода посредством Ответа, становится полностью вторичной (возможно, даже вредной) по отношению к созданию хорошо структурированных приложений – приложений, которые независимы от какого-либо пользовательского интерфейса.

Послесловие

Паттерн MVC для серверной стороны произошёл от Sun архитектуры Model 2 и настолько сильно отличается от MVC для клиентской стороны, что это совершенно разные вещи. Я понял это, поскольку писал свою книгу по модернизации устаревших приложений, и дальнейшее исследование вынудило меня описывать Action-Domain-Responder как веб-ориентированную альтернативу MVC. Action-Domain-Responder делает намного более сильный акцент на HTTP Запросе и Ответе как элементах пользовательского интерфейса. Если вы интересуетесь созданием лучших приложений, вы захотите прочитать статью про ADR и испытать его в своём следующем проекте.

Примечание

Это авторский перевод статьи «Why Do PHP Developers Think MVC Is An Application Architecture?» на русский язык.

Комментарии

  1. Иван пишет:

    Архитектура — это высокоуровневое решение. Если MVC относится к типу приложения, то это архитектура. Если MVC относится к мелкой части приложения, то это шаблон. При этом, такой шаблон может быть заменён на другой без смены функционала. Если это не так то это архитектура. Переделать MVC в чёто другое прикинь как, это написать заново, а значит это архитектура. Модель и вью это шаблон обсервер.

    Я бы так сказал это архитектурный шаблон. Есть дизайн, а есть архитектура. Шаблон – это повторяющийся тип решения. Архитектура это вообще архитектура, ну как бы шаблон какой-нибудь – это же не дизайн, ну например тот же обсервер – это не дизайн, так и мвц это таким же образом не архитектура. Обсервер – это шаблон дизайна приложения, а мвц это шаблон архитектуры приложения.

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *