Относится ли MVC только к сети?


14

Практически мгновенно, когда я говорю с разработчиками о Model View Controller ( MVC ), они говорят, что вы делаете запрос к URL-адресу, когда сервер создает сущность (MODEL) и предоставляет вам визуальное представление этой модели.

  • Значит ли это, что MVC предназначен только для Интернета, или я встречался с людьми, которые являются просто разработчиками, которые используют MVC для написания веб-приложений?

  • Есть ли применение MVC в приложениях в стиле рабочего стола?

  • Я, например, новичок в парадигме и хотел бы знать о любом супер-сет для MVC


1
Вы проверяли вики-теги Programmers.SE или Stack Overflow для «mvc»?
комнат

3
@gnat да, я сделал
Deeptechtons

6
ну тогда вы, наверное, уже знаете ответ на свой вопрос, не так ли?
комнат

4
@gnat серьезно НЕТ, я совершенно новичок в MVC (как было сказано) и никогда не слышал (слышал некоторые уши) о том, что MVC применяется к приложениям Windows, и не использовал приложение со значком MVC на странице загрузок. Извините, если вопрос был глуп, но для меня это загадка
Deeptechtons

Есть много хороших ресурсов для изучения истории MVC, но я часто
KutuluMike

Ответы:


22

MVC это шаблон. Шаблоны применяются во всем программировании. MVC просто очень хорошо работает в веб-контексте.

Как указывает Гнат, просто взгляните на тег mvc, и вы увидите несколько примеров его реализации.


5
Это ключ. MVC действительно хорошо работает в веб-приложениях и, по сути, является большой причиной того, почему современные платформы на основе MVC (такие как Rails, Django и ASP.NET MVC) так популярны. Он работает и в других контекстах (например, приложениях для настольных компьютеров), но сложнее поддерживать чистое разделение представления и контроллера, поэтому варианты, которые удаляют разделение контроллера представления, такие как Model-Delegator (используется Swing) или изменяют место разделения как Model-View-ViewModel (используется в основном приложениями .Net WPF), более распространены в настольных приложениях.
Кевин Кэткарт

Если вы посмотрите оригинальное описание Smalltalk о том, что делает контроллер - переведите пользовательский ввод в сообщения для модели - сама Windows - это в основном один большой контроллер; именно поэтому MVC как шаблон не очень хорошо сочетается с приложениями Windows UI. Его гораздо больше использовали в UI Frameworks для систем, отличных от Windows.
KutuluMike

@MichaelEdenfield Не совсем; Вы можете создавать MVC и WinForms вместе, хотя MVP там более популярен, но MVP в любом случае является вариантом MVC.
Энди

45

Учитывая, что MVC с 1977 года, а сеть была изобретена только в 1991 году, должно быть совершенно очевидно, что MVC предназначен не только для Интернета.


30
Это хорошее начало ответа, но имеет горький вкус во рту.
Николас С.

2
Правильно и скупо. Отличный материал!
Том Хотин - tackline

1
«В 1982 году был стандартизирован пакет интернет-протоколов (TCP / IP), и была представлена ​​концепция всемирной сети полностью взаимосвязанных сетей TCP / IP, называемой Интернет». вики . Если вы имеете в виду netscape, тогда хорошо ... но "сеть" существовала до этого.
JMQ

4
@jmquigley "Интернет" и "Интернет" - это две разные вещи.
Эрик Кинг,

1
@jmq 1977 год все еще до 1982 года, и, как кто-то еще указал на Интернет! = Интернет. Сеть действительно не существовала до 1991 года.
Энди

9

Нет, разработка для OS X и iOS использует шаблон Model View Controller.


2
Наконец, ответ на первый и второй пункты без комментариев.
JeffO

8

Задайте вопрос в среде Microsoft, и многие подумают, что вы имеете в виду Asp.Net MVC, которая является реализацией MVC специально для Интернета.

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


3
+1 это проблема с наименованием платформы после методологии. Когда люди впервые знакомятся с платформой, они не видят различия.
MattDavey

@ Оз это объясняет, почему другие разработчики всегда говорят о вебе, когда MVC - тема
Deeptechtons

1
Пожалуйста, перестаньте изображать разработчиков Microsoft глупыми, спасибо.
Энди

@ Энди - это не было потрясением для разработчиков MS, я сам являюсь разработчиком Asp.Net MVC и отвечаю на оригинальный ответ. Я не говорил «все» люди или «все» .net разработчики, просто наблюдал за предположением или ошибкой, которую я видел, что многие люди делают. Благодарю.
Оз

2

По крайней мере, насколько я знаю, первая реализация MVC была в Smalltalk. Это определенно присутствовало в Smalltalk-80. Хотя у меня нет никакой документации, чтобы доказать это, я считаю, что (или что-то совсем похожее) было к тому времени в Smalltalk несколько лет.

Большинство OO GUI-структур включают по крайней мере какой-то вариант MVC. Однако я не уверен, что именно «суперсет» будет означать в этом случае. Трудно сказать, является ли какой-либо конкретный вариант надмножеством, подмножеством или одноранговым узлом MVC, но я бы предпочел рассмотреть большинство из них равноправных.

В любом случае, многие (большинство?) Из них были использованы для разработки десктопов, а не для веб-разработки. Благодаря некоторым старым патентам AT & T большинству оконных систем требуются программы, позволяющие заново генерировать представления по требованию. Это (почти) вызывает по крайней мере некоторую степень разделения между кодом, который поддерживает текущее состояние (модель), и кодом, который отображает это состояние (представление). Это все еще оставляет много возможностей для вариаций: 1) степень изоляции функциональности контроллера и 2) точные детали того, где проводить линии между каждой из основных частей.



1

Так что в этой области очень много разных шаблонов дизайна.

  • Presenter Model Viewer (MVP)
  • Представление представления представления модели (mvvp)
  • Контроллер модельного вида
  • Модель 2

и так далее. За эти годы они были переплетены, слиты воедино, изменены и применяются в самых разных контекстах. Важным моментом здесь является то, что шаблон проектирования MVC 1977 года довольно сильно изменился и больше не является шаблоном проектирования, используемым серверными веб-фреймворками. В качестве примера в исходной реализации smalltalk Модель будет наблюдать представление об изменениях, что уже не так, поскольку серверная часть просто не может наблюдать элементы html в браузере пользователей. Вместо этого, если представление изменяется, представление отправит запрос контроллеру, который затем обновит представление. Опять же, первоначальная реализация MVC не соблюдается, поскольку обновление модели будет означать, что все виды, зависящие от модели, будут обновлены.

Современные веб-фреймворки следуют простой трехуровневой архитектуре, также известной как архитектура Model 2.

Конечно, в Интернете есть примеры реальных архитектур MVC, но они часто относятся только к клиентской части и подключены к серверу, который следует архитектуре модели 2, поскольку представления представляют собой xml и json и не наблюдаются для изменений. Примерами чистых архитектур mvc на стороне клиента являются Sencha Touch и Sproutcore.

Если у вас есть MVC в браузере, mvc как на сервере и mvc как уровень данных, у вас есть иерархическая реализация mvc.

Заметка. Я говорил только о веб-фреймворках, у других реализаций MVC, таких как java swing и Flex, есть и другие отличия в реализации.


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

вопрос предполагает, что mvc и web работают хорошо, и умоляет о не web mvc, поэтому, когда вы приводите только примеры mvc в веб-контексте: -1
hildred

1

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

Большинство согласны с тем фактом, что Модель содержит какое-то состояние, а Представление отображает его. Но у Контролера очень разные роли.

В Smalltalk, где она была впервые описана, Модель является ядром вашего приложения, данных и бизнес-методов. Представление является графическим представлением состояния приложения (он же Модель), а Контроллер управляет событиями пользовательского ввода, мыши и клавиатуры. Контроллер, например, направляет события клавиатуры в элемент представления, имеющий фокус.

На страницах .jsp Модель в основном представляет собой данные, представление отображает эту модель в HTML, а контроллер выполняет маршрутизацию модели в надлежащее представление для ее отображения.

Итак, чтобы ответить на ваш вопрос, хотя MVC используется как в автономных приложениях (Java, .Net, Flex), так и в Интернете (страницы JSP), это совсем другое. Это означает, что MVC, который вы знаете, не используется в автономных приложениях.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.