MVC против n-уровневой архитектуры

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

ваше здоровье


person Arnkrishn    schedule 30.03.2009    source источник


Ответы (12)


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

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

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

person Zak    schedule 30.03.2009
comment
N-уровень также является шаблоном проектирования, вам не нужно 3 сервера для создания 3-уровневой системы, на самом деле, можно создать n-уровневую систему, используя один файл, разделяя каждый уровень концептуальной концепцией. - person magallanes; 16.04.2011
comment
Уровень в основном подразумевает, что межпроцессное взаимодействие происходит обычно через сетевое соединение. Я не согласен с тем, что внутрипроцессный (не говоря уже о том, в том же файле) поток разработки кода представляет собой многоуровневый подход к проектированию. Конечно это ИМХО. Сервер подразумевает, что машина может запускать несколько процессов на одном компьютере; и они, вероятно, все еще могут разговаривать в локальной сети. - person Zak; 13.09.2011
comment
Все обсуждаемые форматы являются примерами трехуровневого дизайна. Не путайте разницу между слоем и ярусом. Это правда, что вы можете запускать более одного уровня на физической машине (например, вы разделяете большой сервер с помощью гипервизоров), но дело здесь в N-уровне, который относится к физическому сетевому переходу (например, TCP / IP). Локально вам будет более эффективно использовать именованные каналы, но, опять же, если вы работаете в той же системе, вы соревнуетесь за память и вычислительную мощность. Все это причины рассмотреть возможность изолирования презентации, бизнес-логики и доступа к данным и базы данных на разных машинах. - person Zack Jannsen; 19.09.2012
comment
Я бы порекомендовал всем, кто читает этот вопрос, прочитать другие ответы, этот ответ неточный - person keisar; 09.02.2014
comment
@magallanes, используйте 'Zak', сначала нам нужно очистить разницу между Уровень и уровень Здесь очень хорошо статья кода проекта, в которой есть четкое объяснение - person Irfan; 24.10.2016
comment
N-уровень не представляет собой только физическую модель. Этот термин также относится к модели архитектуры программного обеспечения. Ниже извлечение объясняет 3-х уровневый (экземпляр N-го уровня) по сравнению с MVC. Трехуровневая трехуровневая архитектура относится к разделению программного обеспечения на уровне представления (где MVC в любом случае может быть полезно), уровне бизнес-правил и уровне бизнес-сущностей, при этом бизнес-правила служат посредником для всего взаимодействия между представлением и сущностью. - person Don D; 03.12.2019

Если бы трехуровневая конструкция была такой:

Client <-> Middle <-> Data

шаблон MVC будет:

     Middle
     ^    |
     |    v
Client <- Data

Означающий, что:

  • в трехуровневом эквиваленте связь между уровнями является двунаправленной и всегда проходит через средний уровень
  • в эквиваленте MVC обмен данными является однонаправленным; мы могли бы сказать, что каждый "слой" обновляется одним слева и, в свою очередь, обновляет один справа - где "left" и "right" являются просто иллюстративными

P.S. Клиент будет View, а Middle - Controller

person void    schedule 14.07.2010
comment
в MVC может модель взаимодействует напрямую с клиентом (view) ??? Я так не думаю! - person palAlaa; 21.04.2011
comment
@Alaa, я согласен, и поэтому я думаю, что это относится к потоку данных. Обновление: я только что проверил в Википедии, и модель может взаимодействовать с представлением через наблюдателей (а не напрямую). - person void; 26.04.2011
comment
В MVC: архитектура MVC имеет треугольную форму: представление отправляет обновления на контроллер, контроллер обновляет модель, а представление обновляется непосредственно из модели. В трехуровневой архитектуре: трехуровневая архитектура - это уровень клиента, никогда не взаимодействующий напрямую с уровнем данных. В трехуровневой модели все коммуникации должны проходить через средний уровень. - person ketan italiya; 12.09.2013
comment
Здесь, если Middle является контроллером, то связь между Middle, Client и Middle, данные являются двунаправленными, а не однонаправленными, как описано в ans. Контроллер передает данные модели, и модель возвращает обновленные данные контроллеру, который затем возвращает их в браузер. после прохождения просмотра. - person Dragon; 16.11.2015

Вот что сказать о n-уровневая архитектура

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

person Xinus    schedule 04.01.2010
comment
Звучит хорошо, но я не считаю, что представление обновлений непосредственно из модели - хорошая идея. Нет смысла использовать Контроллер для обновлений и вставок, но не для выбора и фильтров, и я не вижу смысла разделения задач только для привязки представления к модели в любом случае! Заключение - MVC - еще одна из тех обфускаций, созданных .... угадайте. Я не припомню, чтобы трехуровневый когда-либо ограничивался системной архитектурой или дизайном приложений. Центральная концепция - разделение интересов. - person Sam; 01.02.2012
comment
Это будет зависеть от того, что вы делаете. Приложение MVC для приложения iOS (которое, вероятно, не позволит обновлять представление непосредственно из модели) будет отличаться от веб-приложения (которое может). MVC - это парадигма, а не абсолютный способ делать что-то. - person Dave Kanter; 04.03.2014
comment
@Sam полностью согласен. Слишком много жаргона для интуитивной концепции. - person smwikipedia; 18.12.2014
comment
звучит хорошо, не работает. Википедия - не окончательный источник истины - person ACV; 15.01.2018
comment
Это то, как вы интерпретируете правду, и опять же, это зависит от ваших целей. - person Xinus; 16.01.2018

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

person allthingscs    schedule 23.03.2011
comment
Я думаю, что это, безусловно, лучший ответ, тем более, что MVC действительно ориентирован на пользовательский интерфейс, и это может быть ваш уровень пользовательского интерфейса в трехуровневом дизайне. Схема в ссылке очень хорошо это демонстрирует. - person Alex; 14.10.2011

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

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

person pooja gupta    schedule 16.02.2010

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

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

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

Это все, что я знаю о MVC.

person Aqeel Ahmad    schedule 16.11.2010
comment
Я думаю, что, как сказано выше, MVC имеет треугольную форму, поэтому представление иногда может напрямую взаимодействовать с моделью и наоборот, как объясняется в этом документе: msdn.microsoft.com/en-us/library/ms978748.aspx - person ychaouche; 29.12.2010

Сделайте перерыв. И не ограничивайте себя определенными шаблонами при решении реальных проблем. Просто запомните некоторые общие принципы, один из которых - РАЗДЕЛЕНИЕ ЗАБОЛЕВАНИЙ.

person smwikipedia    schedule 18.12.2014

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

person Alkema    schedule 18.07.2011

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

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

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

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

person Ed DeGagne    schedule 28.12.2010
comment
Если mvc ничего не использует повторно для вашего сценария, то есть ли преимущества mvc по сравнению с n-уровневой аркой. - person Dragon; 16.11.2015

Вывод: N-уровень - это архитектура, MVC - шаблон проектирования. Это одна и та же метафора, применяемая в двух разных областях.

person ychaouche    schedule 29.12.2010

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


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


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


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

person Arve Systad    schedule 14.09.2009

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

person hassan ketabi    schedule 26.05.2016
comment
На самом деле это не MVC, это MVVMC. Я вижу, что MVC или MVVMC - это просто уровень представления, потому что я вижу, что контроллер - это просто промежуточное ПО между представлениями и BLL. Я бы поддерживал его таким образом, чтобы использовать BLL в качестве библиотеки для создания пользовательского интерфейса для разных платформ. Это вроде aspx.cs с поддержкой asmx. Иногда мне кажется, что MVC - плохой способ организации файлов в папке проекта, это немного сложно понять, потому что все контроллеры будут на одном уровне, а представления во вложенных папках. Я также могу создавать подпапки для контроллеров, но это дублирует работу. - person Nithin B; 20.06.2020