Различия MVC и Three Tier?



@DollyPapper

Привет. Вопрос в следующем. Начал разбирать для себя трёх уровневую архитектуру, не понял в чём её принципиальное отличие от MVC и как оказалось, я так же не правильно походу понимаю MVC.
В классической трёх звёнке, структура линейна, BLL и PL никогда между собой на прямую не общаются. Я тоже самое думаю про MVC. Возьмем например Yii2 и как я обычно пишу. View отрпавляет запрос, его обрабатывает контроллер, который дерагет методы в модели, та что-то готовит, отдает результат контроллеру, а тот рендерит новую view через render или еще каким то образом, например через rest запросы отдает данные в клиент, то есть обновляет view. И тут я для себя отличий не вижу между MVC и three tier. Однако я пошел на SO искать эти различия и услышал такую вещь

The main difference between both is:

A three tier architecture is the client tier never communicates directly with the data tier In a Three-tier model all communication must pass through the middle tier

MVC architecture is triangular: the view sends updates to the controller, the controller updates the model, and the view gets updated directly from the model

И действительно, если посмотреть на диаграмму в той же википедии 240px-MVC-Process.png
От модели мы видим стрелку с Update которая идет во View. То есть например всё с тем же примером из Yii, чтобы было конкретней, метод render нужно вызывать в модели, чтобы следовать паттерну MVC?

UPD: как я сейчас себе вижу MVC (хотя это может быть гибрид между 3 тир и MVC)
611503d1ad7ab167907810.png


Решения вопроса 0


Ответы на вопрос 2



@insighter

Может не стоит так дотошно подходить к вопросу?
MVC — это паттерн программирования для разделения данных и визуального представление этих данных.
Трехзвенка, если очень упрощенно означает, что работа с данными идет не напрямую с сервером СУБД, а через некоторый промежуточный слой, который чаще всего вводит свои абстракции.



@bingo347

MVC вообще не рассматривает слой данных, зато разделяет клиентский слой на View (что показываем пользователю, например HTML и CSS в web, а так же их изменение во времени) и на Controller (обработчики внешних событий, клики мыши, нажатия клавиатуры, запросы извне).
Model (бизнес модель, то как бизнес правила отражены в коде, собственно это и есть логика) действительно совпадает по своей сути со слоем логики.
Слой данных не выражен в MVC, но он полезен, ибо действительно не надо смешивать домен с деталями, а работа с данными (БД, файлы, внешние API) — это детали, которые более подвержены изменениям во времени чем бизнес правила. А значит отделив этот слой мы инвестируем время в будущее, упростив поддержку ПО в будущем.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *