Это все равно, что спросить, в чем разница между яблоком и яблочным ядром. Эти две архитектуры не являются заменой друг другу. Я думаю, что более точное представление состоит в том, что 3-уровневая архитектура дополняет MVC.
Архитектура MVC
Модели: они представляют «материал» в вашем приложении. Этот слой стал немного размытым в последние годы, как я объясню позже.
Просмотры: пользовательский интерфейс. То, с чем взаимодействует пользователь.
Контроллеры: программный код, который отвечает пользователю и изменениям на уровне модели
3-х уровневая архитектура
С 3-уровневой архитектурой у вас есть слои с разными обязанностями.
Пользовательские сервисы: (или «сервисы» в целом) Этот уровень больше связан с координацией поиска и модификаций «модельного» уровня. Сложные, многошаговые действия выполняются здесь
Бизнес-уровень: представляет бизнес-правила, вписанные в программный код. То, что хочет «Бизнес», исполняется на этом уровне.
Уровень доступа к данным: один или несколько классов, отвечающих за доступ к постоянному хранилищу данных.
Единственная часть 3-уровневой архитектуры, которая пересекается с MVC, - это «Бизнес-уровень». «Модели» в MVC и «Бизнес-уровень» в 3-уровневой архитектуре пытаются достичь одной и той же цели.
«М» в MVC стало нечетким
«Модельный» слой в MVC расширился за последние годы. Из того, что я видел, есть две, возможно, три вида моделей:
Модели предметной области: они представляют собой «вещи», о которых заботится «Бизнес» - бизнес-домен. Эти классы содержат данные и все процедуры, которые работают с этими данными для обеспечения соблюдения бизнес-правил. Часто доменные модели привязаны к таблицам в базе данных. Кажется, это соответствует «бизнес-уровню» 3-уровневой архитектуры.
Модели представления: это классы, используемые для преобразования данных из моделей предметной области в нечто более приятное для просмотра. Это никуда не вписывается в трехуровневую архитектуру, поскольку модели представлений не реализуют бизнес-логику и не предоставляют какой-либо вид обслуживания или доступа к данным.
Бизнес-модели. В сложных приложениях возникает необходимость отделить модель домена от бизнес-логики. Бизнес-модели содержат данные и процедуры, работающие с этими данными для реализации бизнес-правил, а доменные модели переводятся в «Пакеты свойств» - объекты, которые просто содержат данные, но не содержат поведения. Доменные модели становятся еще одной формой объекта передачи данных между базой данных и приложением.
Нигде в MVC не упоминается доступ к данным. В некоторых случаях вы увидите, что доступ к данным относится к «модельному» слою MVC, который, как мы видели, больше не является прозрачным. Действительно, я вижу трехуровневую архитектуру в паре с MVC для создания целого приложения. Один увеличивает или улучшает другой:
- модели
- Доменные модели (MVC / 3-уровневый)
- Просмотр моделей (MVC)
- (опционально) бизнес-модели (MVC / 3-х уровневый)
- Просмотры (MVC)
- Контроллеры (MVC)
- Доступ к данным (3 уровня)
- Услуги (3 уровня)
Есть некоторые пересечения, но они в значительной степени разделены, и вместе используются, чтобы разъединить и изолировать различные компоненты большей системы.