2009-03-30 2 views
133

Мне было интересно, какая именно разница между MVC (который является архитектурным шаблоном) и архитектурой n-уровня для приложения. Я искал его, но не нашел простого объяснения. Может быть, я немного наивна для концепций MVC, поэтому, если кто-нибудь может объяснить разницу, тогда это было бы здорово.MVC Vs n-level architecture

веселит

ответ

84

N-уровневая архитектура, как правило, имеет каждый слой отделен от сети. И.Е. уровень представления находится на некоторых веб-серверах, а затем он обращается к серверным серверам приложений по сети для бизнес-логики, а затем говорит о сервере базы данных снова по сети, и, возможно, сервер приложений также обращается к некоторым удаленным службам (скажем, Authorize.net для обработки платежей).

MVC - это шаблон проектирования программирования, в котором различные части кода отвечают за представление модели, представления и контроллера в некоторых приложениях. Эти две вещи связаны между собой, поскольку, например, слой модели может иметь внутреннюю реализацию, которая вызывает базу данных для хранения и извлечения данных. Контроллер может находиться на веб-сервере и удаленно обращаться к службам приложений для извлечения данных. MVC абстрагирует детали того, как реализована архитектура приложения.

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

+45

N-level также является шаблоном проектирования, вам не нужно 3 сервера для создания трехуровневой системы, на самом деле можно использовать систему n-уровня, используя один файл, разделяя каждый уровень на один концептуальная концепция. – magallanes

+5

Уровень в основном подразумевает, что происходит межпроцессное общение Обычно по сетевой ссылке. Я не согласен с тем, что поток разработки кода (не говоря уже о том же файле) представляет собой многоуровневый подход к дизайну. Конечно, это ИМХО. «Сервер» означает, что машина может запускать несколько процессов в одном окне; и они, возможно, даже могут разговаривать в сети «localhost». – Zak

+1

Все обсуждаемые форматы являются примерами трехслойных конструкций. Не путайте разницу между слоем и уровнем. Это правда, что вы можете запускать более одного уровня на физическом mahcine (например, вы делите большой сервер с помощью гипервизоров), но здесь речь идет о N-Tier aludes к физическому сетевому переходу (например, TCP/IP). Локально вы были бы более эффективны для использования именованных каналов, но опять же, если вы работаете в одной и той же системе, вы можете конкурировать за память и вычислительную мощность. Все это является основанием для рассмотрения изоляции презентации, Business Logic & Data Access и базы данных на разных машинах. –

1

Джерри: Вот простой пример того, как две связаны:


Tier 1 - Состоит из моделей, которые обмениваются данными с 2-го уровня через какое-то услуга сети или аналогичный, контроллеры для обработки ввода валидации, расчетов и других вещей, имеющих отношение к представлениям. И он содержит сами представления, конечно, - это может быть GUI в настольном приложении или веб-интерфейсе в веб-приложении.


Tier 2 - содержит какую-то услугу или другой способ ПОЛУЧАТЬ сообщения от Tier 1. Не/не должен знать о Tier 1, поэтому не может ответить только на звонки сверху - не запрашивают вещей само по себе. Также содержит всю бизнес-логику.


Tier 3 - содержит модель предметной области, объектное представление базы данных и всю логику общения и обновление база-записи.

30

Это то, что говорят о n-tier architecture

На первый взгляд, эти три яруса могут показаться похожим на MVC (Model View Controller) концепции; однако топологически они разные. A фундаментальное правило в трехуровневой архитектуре - это клиентский уровень никогда напрямую связывается с данными уровень; в трехуровневой модели все сообщения должны проходить через уровень промежуточного уровня . Концептуально трехъярусная архитектура является линейной. Тем не менее, архитектура MVC равна треугольной: просмотр отправляет обновления для Контроллер, контроллер обновляет Модель, и представление обновляется непосредственно из модели.

+10

Звучит неплохо, но я не верю, что «просмотр обновляется непосредственно из модели» - хорошая идея. Не имеет смысла использовать контроллер для обновлений и вставок, но не для выбора и фильтров, и я не вижу смысла разделять проблемы только для привязки представления к модели в любом случае! Вывод - MVC - еще одна из тех обфускаций, созданных .... Угадайте. Я не помню, чтобы 3-х уровневый лимит был ограничен «архитектурой системы» или «дизайном приложения». Центральное понятие - это разделение проблем **. – Sam

+1

Это будет зависеть от того, что вы делаете. Приложение MVC для приложения iOS (которое, вероятно, не позволит обновлять представление непосредственно из модели) будет отличаться от веб-приложения (которое может). MVC - парадигма, а не абсолютный способ делать вещи. –

+1

@Sam полностью согласен. Слишком много жаргонов для интуитивной концепции. – smwikipedia

5

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

Это облицовочная архитектура. Это касается вопроса о том, как передавать информацию между пользователем и базой данных. Где MVC представляет собой треугольную архитектуру: View отправляет обновления контроллеру, контроллер обновляет модель, и представление обновляется непосредственно из модели. Это касается вопросов о том, как пользовательский интерфейс управляет компонентами на экране.

+0

Зачем голосовать? Это было положительное утверждение – contactmatt

38

Если дизайн 3-х уровневая были такими:

Client <-> Middle <-> Data 

стук MVC будет:

 Middle 
    ^ | 
    | v 
Client <- Data 

Это означает, что:

  • в 3-уровневой эквиваленте, связь между слоями двунаправленная и всегда проходит через Ми ddle tier
  • в эквиваленте MVC сообщение находится в однонаправленный; мы могли бы сказать, что каждый «слой» обновляется один слева и, в свою очередь, обновляет один в правой -Где «влево» и «вправо», являются просто иллюстративными

P.S. Клиент будет несомненно Посмотреть и СреднийКонтроллер

+9

в MVC может модель взаимодействует напрямую с клиентом (view) ??? Я так не думаю! – palAlaa

+6

@Alaa, я согласен, и именно поэтому я _think_ это относится к потоку данных. Обновление: Я только что проверил в Википедии, и Модель может взаимодействовать с Просмотром через наблюдателей (а не напрямую). – void

+1

В MVC: архитектура MVC является треугольной: представление отправляет обновления контроллеру, контроллер обновляет модель, и представление обновляется непосредственно из модели В трех уровнях: трехуровневая архитектура - это уровень клиента, который никогда не связывается напрямую с уровень данных. В трехуровневой модели все сообщения должны проходить через средний уровень. –

5

@Cherry Средний посуда работает больше как обработчик запроса или редиректор в MVC шаблон.

Я хотел бы немного рассказать о MVC, согласно мне Model View Controller работает так.

  1. Клиент инициирует сеанс, запросив любую услугу.
  2. Этот запрос получен и обработан контроллером (обработчик запроса, перенаправитель и т. Д.)
  3. Контроллер обрабатывает основную информацию по запросу и перенаправляет ее в соответствующую модель, которая может заполнить запрос данных.
  4. Модель заполнить запрос в соответствии с параметрами, переданными контроллером, и отправить результаты на контроллер. (Примечание: Здесь мне нравится очищать, что данные напрямую не возвращаются клиенту в истинную архитектуру MVC, а заполняется и возвращается контроллеру.)
  5. Контроллер, чем отправить эти данные View (Client).
  6. У клиента есть запрошенный сервис перед ним.

Это все о MVC, который я знаю.

+1

Я думаю, что, как сказано выше, MVC треугольный, поэтому View может иногда говорить напрямую с моделью и наоборот, как описано в этом документе: http://msdn.microsoft.com/en-us/library/ms978748 .aspx – ychaouche

3

Архитектуру N-уровня лучше всего определять с использованием диаграммы развертывания.

Архитектуру MVC лучше всего определять с использованием диаграммы последовательности.

2 не являются одинаковыми и не имеют отношения, и вы можете объединить две архитектуры вместе. Многие компании предприняли шаги по созданию архитектуры N Tier'd для не только развертывания и масштабируемости, но и для повторного использования кода.

Например, ваши объекты Business Entity могут потребоваться для использования настольным приложением, веб-службой, предоставляемой клиенту, веб-приложению или мобильному приложению. Просто использование подхода MVC не поможет вам повторно использовать что-либо вообще.

+0

Если mvc не повторно использует что-либо для вашего данного сценария, то есть ли какие-либо преимущества mvc по сравнению с аркой n уровня. – Dragon

2

Заключение: N-уровневая архитектура, MVC - шаблон дизайна. Они являются одним и тем же метафором, применяемым в двух разных областях.

16

Единственное сходство состоит в том, что два шаблона имеют три окна в своих диаграммах. По сути, они совершенно разные в своих целях. Если это факт, обычно нет выбора между тем, какой шаблон использовать, но оба шаблона можно использовать вместе. Вот хорошее сравнение двух: http://allthingscs.blogspot.com/2011/03/mvc-vs-3-tier-pattern.html

+3

Я думаю, что это, безусловно, лучший ответ, тем более что MVC действительно сосредоточен на пользовательском интерфейсе, и это может быть ваш уровень пользовательского интерфейса в трехуровневом дизайне. Диаграмма в ссылке демонстрирует это очень хорошо. – Alex

4

Помимо линейности, еще одно существенное отличие, которое не было подчеркнуто достаточно, заключается в том, что в модели N-уровня N не обязательно 3 уровня! Он чаще всего реализуется как три уровня (презентация, приложение, данные), причем средний уровень имеет два подэтапа (бизнес-логика и доступ к данным). Кроме того, модель MVC может содержать как данные, так и бизнес-логику для манипулирования данными, тогда как в n-уровне они будут находиться в разных уровнях.

4

Дайте себе передышку. И не ограничивайте себя определенными шаблонами при решении реальных проблем. Просто запомните некоторые общие принципы, один из которых - ОТДЕЛЕНИЕ КОНЦЕРН.

0

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

Смежные вопросы