Архитектура больше подходит для веб-приложений, чем MVC?

Я изучаю Zend и его структуру приложений MVC для своей новой работы, и обнаружил, что работа с ней просто беспокоила меня по причинам, на которые я не мог положиться. Затем во время учебы я наткнулся на такие статьи, как MVC: No Silver Bullet и этот подкаст на тема MVC и веб-приложений. Парень в подкасте сделал очень хороший пример против MVC в качестве архитектуры веб-приложений и прибил много того, что меня било по голове.

Однако вопрос остается, если MVC не очень подходит для веб-приложений, что это такое?

Ответ 1

Все зависит от стиля кодирования. Вот секрет: Невозможно написать классический MVC в PHP.

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

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

В веб-разработке у вас есть еще 4 других решения, основанных на MVC:

  • Model2 MVC: представление запрашивает данные из модели, а затем решает, как ее отобразить и какие шаблоны использовать. Контроллер отвечает за изменение состояния как View, так и Model.

  • MVVM: контроллер переопределяется для ViewModel, который отвечает за перевод между ожиданиями представления и логикой моделей. Просмотр запросов данных от контроллера, который переводит запрос, чтобы Модель могла его понять.

    Чаще всего вы будете использовать это, если у вас нет контроля над представлениями или уровнем модели.

  • MVP (какие фрэш-структуры называют MVC): Presenter запрашивает информацию из модели, собирает ее, изменяет и передает ее пассивному представлению.

    Чтобы изучить этот шаблон, я бы рекомендовал вам начать с эту публикацию. Он подробно объяснит это.

  • HMVC (или PAC): отличается от Model2 способностью контроллера выполнять субконтроллеры. Каждый из них имеет собственную триаду M, V и C. Вы получаете модульность и ремонтопригодность, но платите с некоторым ударом по производительности.

В любом случае. Суть в том, что вы на самом деле не использовали MVC.

Но если вы устали от всех MVC-подобных структур, вы можете посмотреть:

  • архитектуры с событиями
  • Архитектура n-уровня

И тогда всегда существует парадигма DCI, но она имеет некоторые проблемы при применении к PHP (вы не можете использовать класс в PHP. не без уродливых хаков).

Ответ 2

Из моего опыта преимущества, которые вы получаете от архитектуры MVC, намного превосходят его затраты и очевидные накладные расходы при разработке для Интернета.

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

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

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

Если есть действительно другие хорошие альтернативы этой парадигме там... Я очень заинтересован в ответах!

Извините за небольшую стену текста!

Ответ 3

Я думаю, это будет зависеть от того, что вы пытаетесь сделать лично. Magenta использует MVC довольно успешно, и это позволяет легко добавлять новые функции или изменять существующие.

Конечно, если вы пытаетесь сделать что-то довольно простое, переход с архитектурой MVC может быть излишним.

Ответ 4

Это все предпочтение. Я работал со старыми структурами, такими как XTemplates и Smarty, и теперь перешел к Codeigniter и Kohona. Мне они очень нравятся, и они отлично работают для всего, что я делаю в Интернете. Для приложений для работы с телефоном я могу настроить контроллеры для функций, необходимых для этого, а также для переноса данных. Работая как в мире Linux, так и в Windows World, для создания веб-сайтов ASP.NET я не вижу другого способа создания сайтов рядом с использованием MVC. Проекты веб-приложений в Visual Studio все еще используются, но я больше не хочу этого делать. Проекты MVC через Visual Studio настолько просты в использовании и настройке. Вы можете щелкнуть правой кнопкой мыши по вашим методам контроллера и автоматически создать представления. В каждой структуре есть хорошо и плохо, но разработчик должен использовать все, что соответствует их потребностям.