DollyPapper
@DollyPapper

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

Привет. Вопрос в следующем. Начал разбирать для себя трёх уровневую архитектуру, не понял в чём её принципиальное отличие от 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
  • Вопрос задан
  • 554 просмотра
Пригласить эксперта
Ответы на вопрос 3
insighter
@insighter
-First time? - Huh? (C#, React, JS)
Может не стоит так дотошно подходить к вопросу?
MVC - это паттерн программирования для разделения данных и визуального представление этих данных.
Трехзвенка, если очень упрощенно означает, что работа с данными идет не напрямую с сервером СУБД, а через некоторый промежуточный слой, который чаще всего вводит свои абстракции.
Ответ написан
bingo347
@bingo347
Crazy on performance...
MVC вообще не рассматривает слой данных, зато разделяет клиентский слой на View (что показываем пользователю, например HTML и CSS в web, а так же их изменение во времени) и на Controller (обработчики внешних событий, клики мыши, нажатия клавиатуры, запросы извне).
Model (бизнес модель, то как бизнес правила отражены в коде, собственно это и есть логика) действительно совпадает по своей сути со слоем логики.
Слой данных не выражен в MVC, но он полезен, ибо действительно не надо смешивать домен с деталями, а работа с данными (БД, файлы, внешние API) - это детали, которые более подвержены изменениям во времени чем бизнес правила. А значит отделив этот слой мы инвестируем время в будущее, упростив поддержку ПО в будущем.
Ответ написан
Комментировать
@v__V__v
Разработчик
На мой взгляд, это просто разные представления одного и того же. Если мысленно наложить прозрачное изображение слоев модели Three Tier на MVC, то у нас в слое данных окажется кусок модели отвечающий за запросы в базу данных, их структуру и т.п., в слое логики оставшийся кусок модели+контроллер, обеспечивающие бизнес-логику и все, что с этим связано, а в слое клиента - представление.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы