MVC V n-ярусна архітектура


142

Мені було цікаво, у чому саме різниця між MVC (що є архітектурним малюнком) та n-ярусною архітектурою для програми. Я шукав його, але не зміг знайти простого пояснення. Можливо, я трохи наївний щодо концепцій MVC, тож якщо хтось може пояснити різницю, то було б чудово.

ура

Відповіді:


94

N-ярусна архітектура зазвичай має кожен шар, розділений мережею. IE, презентаційний шар знаходиться на деяких веб-серверах, потім вони розмовляють із серверами додатка через мережу для ділової логіки, потім спілкуються з сервером баз даних, знову по мережі, і, можливо, сервер додатків також звертається до деяких віддалених служб ( скажімо, Авторизація.net для обробки платежів).

MVC - це схема дизайну програмування, де різні частини коду відповідають за представлення моделі, перегляду та контролера в певній програмі. Ці дві речі пов'язані між собою, оскільки, наприклад, рівень Модель може мати внутрішню реалізацію, яка викликає базу даних для зберігання та отримання даних. Контролер може перебувати на веб-сервері та віддалено викликати додатків для отримання даних. MVC абстрагує деталі того, як реалізується архітектура програми.

N-рівень якраз і стосується фізичної структури реалізації. Ці двоє іноді плутають, оскільки дизайн MVC часто реалізується за допомогою архітектури N-ярусів.


56
N-ярус - це також схема дизайну, для 3-ярусної системи вам не потрібно 3 сервера, насправді можна зробити n-ярусну систему за допомогою одного файлу, відокремлюючи кожен ярус концептуальною концепцією.
magallanes

6
Рівень рівня означає, що міжпроцесовий зв'язок відбувається зазвичай через мережеве посилання. Я не погоджуюся, що потік проектування коду (не кажучи вже в одному файлі) являє собою підхід багаторівневого дизайну. Звичайно, це ІМХО. "Сервер" означає, що машина може запускати кілька процесів в одній коробці; і вони, ймовірно, навіть можуть ще говорити в мережі "localhost".
Зак

2
Усі формати, що обговорюються, є прикладами тришарових конструкцій. Не плутайте різницю між шаром і ярусом. Це правда, що ви можете запускати більше одного рівня на фізичному махіні (наприклад, ви розділите великий сервер за допомогою гіпервізорів), але справа тут в N-ярусному переході до фізичного мережевого скаку (наприклад, TCP / IP). Місцево вам буде складніше використовувати названі труби, але знову ж таки, якщо ви працюєте в одній і тій же системі, ви змагаєтесь за пам'ять і потужність обробки. Все це є причиною розгляду можливості виділення презентації, бізнес-логіки та доступу до даних та бази даних на різних машинах.
Zack Jannsen

1
Я рекомендую будь-кому, хто читає це запитання, щоб прочитати інші відповіді, ця відповідь неточна
keisar

@magallanes, Go з «Зака», спочатку нам потрібно очистити різницю між Tier і Layer Тут дуже хороша CodeProject стаття , в якій є чітке пояснення
IRF

42

Якщо трирівнева конструкція була такою:

Client <-> Middle <-> Data

скоромовкою MVC буде:

     Middle
     ^    |
     |    v
Client <- Data

Це означає, що:

  • у трирівневому еквіваленті зв’язок між шарами є двонаправленим і завжди проходить через середній рівень
  • в еквіваленті MVC зв'язок знаходиться в односпрямованому ; ми можемо сказати, що кожен "шар" оновлюється лівим ліворуч і, в свою чергу, оновлює цей праворуч - там, де "ліворуч" і "праворуч" є лише ілюстративними

PS Клієнт буде цілком Подивитися і Середній контролер


13
в MVC може модель взаємодіє безпосередньо з клієнтом (перегляд) ??? Я не думаю, що так!
palAlaa

6
@Alaa, я погоджуюсь, і тому я думаю, що це стосується потоку даних. Оновлення: Я щойно перевірив у Вікіпедії, і Модель може взаємодіяти з Поглядом через спостерігачів (не безпосередньо).
недійсна

1
У MVC: архітектура MVC трикутна: подання надсилає оновлення до контролера, контролер оновлює модель, а представлення оновлюється безпосередньо з моделі. В три рівня: архітектура трьох рівнів - клієнтський рівень ніколи не спілкується безпосередньо з рівнем даних У трирівневій моделі все спілкування повинно проходити через середній рівень
кетан італія

1
Тут, якщо Middle є контролером, то зв'язок між Middle, Client і Middle, Data є двонаправленим, а не однонаправленим, як описано в ans..Контролер передає дані в модель, а модель повертає оновлені дані до контролера, який потім повертає їх до браузера після проходження через вигляд.
Дракон

30

Це те, що кажуть про n-ярусну архітектуру

На перший погляд, три яруси можуть здатися схожими на концепцію MVC (Model View Controller); однак топологічно вони різні. Основним правилом трирівневої архітектури є те, що рівень клієнта ніколи не спілкується безпосередньо з рівнем даних; у трирівневій моделі вся комунікація повинна проходити через проміжний рівень. Концептуально трирівнева архітектура є лінійною. Однак архітектура MVC трикутна: Перегляд надсилає оновлення до Контролера, Контролер оновлює Модель, а Перегляд оновлюється безпосередньо з Моделі.


11
Звучить добре, але я не вірю, що "Погляд оновлюється безпосередньо з Моделі" - це гарна ідея. Немає сенсу використовувати Контролер для оновлень і вставок, але не для вибору та фільтрів, і я не бачу сенсу розділення проблем, щоб все-таки прив'язати погляд до моделі! Висновок - MVC - це ще одне з тих обтурацій, створених .... маю здогаду. Я не пригадую, щоб 3-х рівневий ніколи не обмежувався "архітектурою системи" або "дизайном додатків". Центральна концепція - це розділення проблем .
Сем

1
Це залежало б від того, що ти робиш. Додаток MVC для програми iOS (який, ймовірно, не дозволить оновлювати представлення даних безпосередньо з Моделі), буде відрізнятися від веб-програми (що може). MVC - парадигма, а не абсолютний спосіб робити речі.
Дейв Кантер

2
@Sam повністю згоден. Занадто багато жаргону для інтуїтивної концепції.
smwikipedia

1
звучить добре, не працює. Вікіпедія не є найвищим джерелом істини
ACV

Це те, як ви тлумачите правду, і знову це залежить від ваших цілей
Xinus

17

Єдина схожість полягає в тому, що два візерунки мають три діаграми у своїх діаграмах. Принципово вони абсолютно різні за своїм використанням. Якщо насправді, це не звичайний вибір між тим, який шаблон використовувати, але обидва шаблони можна використовувати разом. Ось хороше порівняння двох: http://allthingscs.blogspot.com/2011/03/mvc-vs-3-tier-pattern.html


3
Я думаю, що це, безумовно, найкраща відповідь, тим більше, що MVC дійсно орієнтований на інтерфейс користувача, і це може бути ваш рівень інтерфейсу в 3-х рівневій конструкції. Діаграма у посиланні це дуже добре демонструє.
Олексій

5

Основним правилом трирівневої архітектури є те, що рівень клієнта ніколи не спілкується безпосередньо з рівнем даних; у трирівневій моделі вся комунікація повинна проходити через проміжний рівень.

Це лінійна архітектура. Тут вирішується питання про передачу інформації між користувачем та базою даних. Якщо MVC - це трикутна архітектура: Перегляд надсилає оновлення до Контролера, Контролер оновлює Модель, а Перегляд оновлюється безпосередньо з Моделі. Тут розглядаються питання, як користувальницький інтерфейс управляє компонентами на екрані.


5

@Cherry Middle посуд працює більше, як обробник запитів або перенаправлення в MVC Pattern.

Я хотів би трохи пояснити MVC, на мою думку Controller Model View працює так.

  1. Клієнт ініціює сеанс, запитуючи про будь-яку послугу.
  2. Цей запит отримує та обробляє Контролер (Запит обробника, перенаправлення тощо)
  3. Контролер обробляє основну інформацію про запит і перенаправляє його до відповідної Моделі, яка може заповнити запит даних.
  4. Модель заповніть запит відповідно до параметрів, переданих контролером, і відправте результати на контролер. (Примітка. Тут мені хочеться зрозуміти, що дані не повертаються клієнту безпосередньо в справжній архітектурі MVC, а вони заповнюються і повертаються до контролера.)
  5. Контролер, ніж надсилати ці дані в View (Клієнт).
  6. Клієнт має запитувану послугу перед собою.

Це все про MVC, що я знаю.


1
Я думаю, що, як було сказано вище, MVC є трикутним, тому Вигляд іноді може говорити безпосередньо з Моделлю і навпаки, як пояснено в цьому документі: msdn.microsoft.com/en-us/library/ms978748.aspx
ychaouche

5

Дайте собі відпочити. І не обмежуйте себе певними зразками, коли вирішуєте реальні проблеми. Просто пам’ятайте деякі загальні принципи, один з яких - ВІДДІЛЕННЯ СПІВ .


4

Крім лінійної, ще одна основна відмінність, яка недостатньо підкреслюється тут, полягає в тому, що в N-ярусної моделі N не обов'язково є 3-рівневою! Найчастіше реалізується у вигляді трьох рівнів (презентація, додаток, дані), середній рівень має два підрівні (бізнес-логіка та доступ до даних). Також модель в MVC може містити як дані, так і бізнес-логіку для маніпулювання даними, тоді як вони будуть в окремих рівнях n-ярусу.


3

N-ярусну архітектуру найкраще визначити за допомогою діаграми розгортання.

Архітектуру MVC найкраще визначити за допомогою діаграми послідовності.

2 не однакові і не пов'язані між собою, і ви можете поєднати дві архітектури разом. Багато компаній зробили кроки для створення архітектури N Tier'd не лише для розгортання та масштабування, але і для повторного використання коду.

Наприклад, об’єкти Вашої суб'єкта господарювання, можливо, потребують використання настільного додатка, веб-сервісу для клієнта, веб-додатка або мобільного додатка. Просто використання підходу MVC не допоможе вам взагалі нічого використовувати.


Якщо mvc нічого не використовує для даного сценарію, то чи є переваги mvc порівняно з n-ярусною аркою.
Дракон

2

Висновок: N-ярус - це архітектура, MVC - модель дизайну. Вони однакові метафори, застосовані в двох різних полях.


1

Джеррі: Ось простий приклад того, як вони пов'язані між собою:


Рівень 1 - складається з моделей, які спілкуються з Рівнем 2 через якусь послугу мережі або подібні, контролери для обробки вхідних даних, обчислень та інших речей, важливих для представлення даних. І він містить самі погляди, звичайно - якими може бути графічний інтерфейс у настільному додатку або веб-інтерфейс у веб-додатку.


Рівень 2 - Містить якусь послугу чи інший спосіб отримання повідомлень від Рівня 1. Не / не повинен знати про рівень 1, тому може відповідати лише на дзвінки зверху - ніколи не просити речі сам. Також містить всю бізнес-логіку.


Рівень 3 - Містить доменну модель, об'єктне представлення бази даних та всю логіку для спілкування та оновлення записів бази даних.


1

У трирівневій моделі вся комунікація повинна проходити через середній рівень. Концептуально трирівнева архітектура є лінійною. Однак архітектура MVC [model-view-controller] MVC є трикутною: представлення надсилає оновлення до контролера, контролер оновлює модель, а представлення оновлюється безпосередньо з моделі.


Насправді це не MVC, це MVVMC. Я бачу, що MVC або MVVMC є лише презентаційним шаром, тому що я бачу, що контролер - це лише посередництво між поглядами та BLL. Ось так я б підтримував це, щоб я міг використовувати BLL як бібліотеку для створення інтерфейсу користувача для різних платформ. Це свого роду aspx.cs з підтримкою asmx. Я часом відчуваю, що MVC - це поганий спосіб організації файлів у папці проекту, його трохи важко зрозуміти, тому що всі контролери будуть на одному рівні та перегляди в папках. Я також можу створити підпапки для контролерів, але його дублікат роботи.
Нітін Б
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.