Я думаю, что термин «3-уровневая архитектура» является плохо определенным и устаревшим, поскольку он подчеркивает не то, как ваш код структурирован, и не дает никаких преимуществ или недостатков с точки зрения пользователя.Проблема в том, что оно относится к физическому развертыванию , что во времена виртуализации и распределенных вычислений вряд ли имеет смысл.
«Уровень» относится к машинам , иПоскольку вы, как правило, можете запускать и отлаживать свой веб-сайт только с помощью локальной машины разработчика, его обычно можно развернуть на 1 уровне.Возможно, более актуальным вопросом является «каково максимальное количество (логических) машин, на которые я могу разбить мое приложение?» Это число не зависит от фактического фактического развертывания , ивместо этого диктуется структура кода - наслоение.Конечно, машины, которые дублируют другую машину (несколько веб-серверов для балансировки нагрузки), не учитываются.
Информация по-прежнему вряд ли актуальна.Предполагается, что ваш код разделяет проблемы и может быть более масштабируемым, чем код, который не позволяет разбивать на отдельные уровни.Другая идея - сильная развязка: вы можете заменить один слой, не касаясь другого.На практике это вряд ли когда-либо работает (например, переключение с Oracle на MySQL) и решает некоторые устаревшие проблемы: «изменение операционной системы на уровне представления повлияет только на код пользовательского интерфейса».( Wikipedia )
Все это становится более нечетким, когда вы добавляете внешние продукты SaaS / PaaS или сторонние инструменты, такие как SolR (поисковая система).Является ли SolR частью уровня данных или частью логического уровня?Становится ли ваша архитектура четырехуровневой, добавляя слой кэширования?Что если ваш уровень базы данных - это не одна машина, а кластер из 10 машин?
MVC, с другой стороны, относится к структуре вашего кода.Однако это не только шаблон уровня представления: модель не знает ни контроллера, ни представления.MVC разделяет данные, представление и логику на различные слои .Большинство реализаций MVC используют Two-Step-View в качестве шаблона уровня представления и PageController в качестве шаблона контроллера. FrontController обычно также существует и обрабатывает все запросы перед делегированием соответствующему PageController - но главное, что модель не знает всего этого.
Я бы предложил отказаться от этого понятия."многоуровневой архитектуры" в целом.