Архитектура больше подходит для веб-приложений, чем MVC?
Я изучал Zend и его прикладную структуру MVC для моей новой работы и обнаружил, что работа с ним просто беспокоила меня по причинам, которые я не мог понять. Затем во время учебы я наткнулся на такие статьи, как MVC: без серебряной пули и этот подкаст на тему MVC и веб-приложений. Парень в подкасте сделал очень хороший аргумент против MVC как архитектуры веб-приложений и прибил много чего из того, что давало мне по голове.
Однако остается вопрос: если MVC не очень подходит для веб-приложений, что это?
4 ответа
Все зависит от вашего стиля кодирования. Вот секрет: невозможно написать классический MVC на PHP.
Любые рамки, которые утверждают, что вы можете лгать вам. Реальность такова, что сами фреймворки не могут даже реализовать MVC - ваш код может. Но это не так хорошо, как маркетинговый ход.
Для реализации классического MVC вам потребуется иметь постоянные модели для начала. Кроме того, Model должна информировать View об изменениях (шаблоне наблюдателя), что тоже невозможно на вашей обычной странице PHP (вы можете сделать что-то похожее на классический MVC, если вы используете сокеты, но это нецелесообразно для реального веб-сайта).
В веб-разработке у вас есть 4 других решения, основанных на MVC:
Model2 MVC: View запрашивает данные из модели, а затем решает, как ее отобразить и какие шаблоны использовать. Контроллер отвечает за изменение состояния как представления, так и модели.
MVVM: Контроллер заменен на ViewModel, который отвечает за перевод между ожиданиями View и логикой моделей. Просмотр запросов данных от контроллера, который переводит запрос, чтобы модель могла его понять.
Чаще всего вы используете это, когда у вас нет контроля ни над видами, ни над слоем модели.
MVP (то, что php-фреймворки называют "MVC"): Presenter запрашивает информацию у Model, собирает ее, модифицирует и передает ее в пассивное представление.
Чтобы изучить этот шаблон, я бы рекомендовал вам начать с этой публикации. Это объяснит это подробно.
HMVC (или PAC): отличается от Model2 способностью контроллера выполнять субконтроллеры. Каждый с собственной триадой M, V и C. Вы получаете модульность и ремонтопригодность, но платите с некоторым ударом по производительности.
Тем не мение. Суть в том, что вы на самом деле не использовали MVC.
Но если вам надоели все MVC-подобные структуры, вы можете посмотреть на:
- управляемые событиями архитектуры
- n-уровневая архитектура
Кроме того, всегда существует парадигма DCI, но у нее есть некоторые проблемы при применении к PHP (вы не можете привести к классу в PHP ... не без уродливых хаков).
По моему опыту, преимущества, которые вы получаете от архитектуры MVC, намного перевешивают ее затраты и очевидные накладные расходы при разработке для сети.
Для кого-то, начинающего со сложной инфраструктуры MVC, может быть немного сложно сделать дополнительные усилия по разделению трех уровней и получить хорошее представление о том, что принадлежит куда-то (некоторые вещи очевидны, другие могут быть довольно пограничными и, как правило, хорошие темы для обсуждения). Я думаю, что эта стоимость окупается в долгосрочной перспективе, особенно если вы ожидаете, что ваше приложение будет расти или будет обслуживаться в течение разумного периода времени.
У меня были ситуации, когда стоимость создания нового API, позволяющего другим клиентам подключаться к существующему веб-приложению, была чрезвычайно низкой из-за хорошего разделения уровней: бизнес-логика вообще не была связана с презентацией, поэтому это был торт
Я полагаю, что в текущей экосистеме MVC фреймворк ваш пробег может сильно отличаться, так как принципы являются общими, но между Zend, Django, RoR и SpringMVC есть много различий.
Если есть действительно другие хорошие альтернативы этой парадигме... Мне очень интересны ответы!
Извините за небольшую стену текста!
Это все предпочтения. Я работал со старыми структурами, такими как XTemplates и Smarty, и теперь перешел к Codeigniter и Kohona. Мне они очень нравятся, и они очень хорошо работают для всего, что я делаю в сети. Для телефонных приложений я могу настроить контроллеры для функций, которые необходимы для извлечения данных. Работая как в мире Linux, так и в мире Windows, для создания веб-сайтов ASP.NET, я не вижу другого способа создания веб-сайтов, кроме использования MVC. Веб-приложения Проекты в Visual Studio все еще используются, но я предпочитаю не больше. Проекты MVC через Visual Studio очень просты в использовании и настройке. Вы можете щелкнуть правой кнопкой мыши на ваших методах контроллера и автоматически создавать представления. В каждой структуре есть хорошее и плохое, но разработчик должен использовать все, что соответствует его потребностям.
Я думаю, это будет зависеть от того, что вы пытаетесь сделать лично. Magenta довольно успешно использует MVC и позволяет легко добавлять новые функции или изменять существующие.
Конечно, если вы пытаетесь сделать что-то довольно простое, переход на архитектуру MVC может оказаться излишним.