Архитектура больше подходит для веб-приложений, чем MVC? - PullRequest
47 голосов
/ 01 октября 2011

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

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

Ответы [ 4 ]

101 голосов
/ 01 октября 2011

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

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

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

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

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

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

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

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

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

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

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

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

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

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

4 голосов
/ 01 октября 2011

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

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

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

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

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

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

0 голосов
/ 16 декабря 2013

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

0 голосов
/ 01 октября 2011

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

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

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