Jump to content

Модель-представление-контроллер

Схема взаимодействий в рамках одного возможного варианта шаблона MVC

Модель-представление-контроллер ( MVC ) — это шаблон проектирования программного обеспечения. [1] обычно используется для разработки пользовательских интерфейсов , который делит связанную логику программы на три взаимосвязанных элемента. Эти элементы:

  • модель , внутренние представления информации
  • представление , интерфейс , который представляет информацию и принимает ее от пользователя
  • контроллер , программное обеспечение , связывающее их. [2] [3]

Традиционно используемый для графических пользовательских интерфейсов (GUI) настольных компьютеров, этот шаблон стал популярным для разработки веб-приложений . [4] Популярные языки программирования имеют структуры MVC, которые облегчают реализацию шаблона.

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

Трюгве Реенскауг создал MVC во время работы над Smalltalk -79 в качестве приглашенного ученого в Исследовательском центре Xerox в Пало-Альто (PARC) в конце 1970-х годов. [6] [7] [8] :  330 Ему нужен был шаблон, который можно было бы использовать для структурирования любой программы, в которой пользователи взаимодействуют с большим и запутанным набором данных . Его дизайн изначально состоял из четырех частей: Модель , Представление, Объект и Редактор. Обсудив это с другими разработчиками Smalltalk , он и остальная часть группы вместо этого остановились на модели, представлении и контроллере. [6]

В окончательном варианте модель чисто и интуитивно представляет некоторую часть программы. Представление — это визуальное представление модели, извлекающее данные из модели для отображения пользователю и передающее запросы туда и обратно между пользователем и моделью. Контроллер — это организационная часть пользовательского интерфейса, которая размещает и координирует несколько представлений на экране, а также принимает вводимые пользователем данные и отправляет соответствующие сообщения базовым представлениям. Эта конструкция также включает в себя редактор как специализированный контроллер, используемый для изменения определенного представления и создаваемый с помощью этого представления. [6]

Smalltalk-80 поддерживает версию MVC, развившуюся на основе этой. [6] Он предоставляет абстрактные view и controller классы, а также различные конкретные подклассы каждого из них, которые представляют различные общие виджеты . В этой схеме View представляет собой некоторый способ отображения информации пользователю, а controller представляет собой некоторый способ взаимодействия пользователя с view. А view также связан с объектом модели, но структура этого объекта остается на усмотрение прикладного программиста . Среда Smalltalk-80 также включает в себя «MVC Inspector», инструмент разработки для параллельного просмотра структуры заданной модели, представления и контроллера. [9]

В 1988 году статья двух бывших сотрудников PARC в «Журнале объектной технологии » (JOT) представила MVC как общую « парадигму и методологию программирования » для разработчиков Smalltalk-80. Однако их схема отличалась как от схемы Ринскауга и др., так и от схемы, представленной в справочниках Smalltalk-80. Они определили представление как охватывающее любую графическую задачу, при этом контроллер — это более абстрактный, обычно невидимый объект, который получает ввод пользователя и взаимодействует с одним или несколькими представлениями и только одной моделью. [10]

Впоследствии шаблон MVC развился, [11] породив такие варианты, как иерархическая модель-представление-контроллер (HMVC), модель-представление-адаптер (MVA), модель-представление-презентатор (MVP), модель-представление-модель представления (MVVM) и другие, которые адаптировали MVC к различным контексты.

Использование шаблона MVC в веб-приложениях возросло после появления NeXT компании в 1996 году WebObjects , который изначально был написан на Objective-C (который в значительной степени заимствован у Smalltalk) и помог реализовать принципы MVC. Позже шаблон MVC стал популярен среди разработчиков Java, когда WebObjects был портирован на Java . Более поздние платформы для Java, такие как Spring (выпущенный в октябре 2002 г.), продолжили прочную связь между Java и MVC.

В 2003 году Мартин Фаулер опубликовал «Шаблоны архитектуры корпоративных приложений» , в которых MVC был представлен как шаблон, в котором «контроллер ввода» получает запрос, отправляет соответствующие сообщения объекту модели, принимает ответ от объекта модели и передает ответ соответствующий вид для отображения. [8] :  56 Это близко к подходу, используемому в платформе веб-приложений Ruby on Rails (август 2004 г.), в которой клиент отправляет запросы на сервер через представление в браузере , эти запросы обрабатываются контроллером на сервере, а контроллер взаимодействует с соответствующими объектами модели. [12] Платформа Django (июль 2005 г., для Python ) предложила аналогичный подход к шаблону «представление шаблона модели» (MTV), в котором представление извлекает данные из моделей и передает их в шаблоны для отображения. [13] И Rails, и Django дебютировали с сильным упором на быстрое развертывание, что увеличило популярность MVC за пределами традиционной корпоративной среды, в которой он уже давно популярен.

Компоненты

[ редактировать ]

Центральный компонент узора. приложения Это динамическая структура данных , независимая от пользовательского интерфейса. [14] Он напрямую управляет данными, логикой и правилами приложения. В Smalltalk-80 разработка типа модели полностью оставлена ​​на усмотрение программиста. [15] В WebObjects, Rails и Django тип модели обычно представляет собой приложения таблицу в базе данных . [16] [17] [18] Модель необходима для обеспечения организованности и согласованности данных. Это гарантирует, что данные приложения ведут себя в соответствии с определенными правилами и логикой.

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

В Smalltalk-80 представление — это просто визуальное представление модели, не обрабатывающее ввод пользователя. [19] В WebObjects представление представляет собой полный элемент пользовательского интерфейса, такой как меню или кнопка, и не получает входные данные от пользователя. [20] Однако и в Smalltalk-80, и в WebObjects представления должны быть универсальными и составными . [21] [22]

В Rails и Django роль представления играют HTML- шаблоны, поэтому в их схеме представление определяет пользовательский интерфейс в браузере, а не представляет непосредственно виджет пользовательского интерфейса. [23] [24] (В свете этого Django предпочитает называть объекты такого типа «шаблоном». [25] ) Этот подход уделяет относительно меньше внимания небольшим, составным представлениям; типичное представление Rails имеет отношение один к одному с действием контроллера. [26]

Представления Smalltalk-80 взаимодействуют как с моделью, так и с контроллером. [27] тогда как в случае с WebObjects представление взаимодействует только с контроллером, который затем взаимодействует с моделью. [28] В Rails и Django представление/шаблон используется контроллером/представлением при подготовке ответа клиенту. [29] [30]

Контроллер

[ редактировать ]

Принимает входные данные и преобразует их в команды для модели или представления. [31]

Контроллер Smalltalk-80 обрабатывает события пользовательского ввода, такие как нажатие кнопок или движение мыши. [32] В любой момент времени с каждым контроллером связано одно представление и модель, хотя один объект модели может получать сигналы от множества разных контроллеров. В любой момент времени только один контроллер, «активный», получает пользовательский ввод; объект глобального оконного менеджера отвечает за настройку текущего активного контроллера. Если пользовательский ввод требует изменения в модели, контроллер подает сигнал модели об изменении, но затем модель несет ответственность за обновление своих представлений. [33]

В WebObjects представления обрабатывают ввод пользователя, а контроллер выступает посредником между представлениями и моделями. Для каждого приложения может быть только один контроллер или один контроллер для каждого окна. Большая часть логики, специфичной для приложения, находится в контроллере. [34]

В Rails запросы, поступающие в серверное приложение от клиента, отправляются на « маршрутизатор », который сопоставляет запрос с конкретным методом конкретного контроллера. В рамках этого метода контроллер взаимодействует с данными запроса и любыми соответствующими объектами модели и готовит ответ, используя представление. Традиционно каждое представление имеет связанный с ним контроллер; например, если приложение имело client представление, обычно оно имеет связанный Clients контроллер тоже. Однако разработчики могут создавать и другие типы контроллеров, если захотят. [35]

Django называет объект, играющий эту роль, «представлением», а не контроллером. [30] Представление Django — это функция, которая получает веб-запрос и возвращает веб-ответ. Для создания ответа он может использовать шаблоны. [36]

Взаимодействия

[ редактировать ]

Помимо разделения приложения на модель, представление и компонент-контроллер, шаблон проектирования MVC определяет взаимодействие между этими тремя компонентами: [37]

  • Модель отвечает за управление данными приложения. Он получает пользовательский ввод от контроллера.
  • Представление отображает представление модели в определенном формате.
  • Контроллер реагирует на ввод пользователя и выполняет взаимодействие с объектами модели данных. Контроллер получает входные данные, при необходимости проверяет их, а затем передает входные данные в модель.

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

Мотивация

[ редактировать ]

Как писал Алан Кей в 2003 году, первоначальной целью MVC было создание графического интерфейса для любого объекта. [40] Это подробно описано в книге Ричарда Поусона «Обнаженные объекты» . [40]

Трюгве Реенскауг, создатель MVC в PARC, написал, что «MVC был задуман как общее решение проблемы пользователей, управляющих большим и сложным набором данных». [6]

В своем руководстве Inside Smalltalk 1991 года информатики профессора Карлтонского университета Уилф Лалонд и Джон Пью описали преимущества MVC в стиле Smalltalk-80 следующим образом:

  • независимость представления и данных, например, несколько представлений одной модели одновременно,
  • составные виджеты презентации, например, одно представление используется как подпредставление другого,
  • переключаемые режимы ввода путем замены одного контроллера на другой во время выполнения [ необходимо уточнение ] , и
  • независимость обработки ввода и вывода благодаря разделению обязанностей контроллеров и представлений. [41]

Использование в веб-приложениях

[ редактировать ]

Хотя изначально MVC был разработан для настольных компьютеров , он получил широкое распространение в качестве дизайна для Всемирной паутины приложений на основных языках программирования . несколько веб-фреймворков Было создано , которые реализуют этот шаблон. Эти программные платформы различаются по своим интерпретациям, в основном по способу разделения обязанностей MVC между клиентом и сервером . [42] Ранние платформы MVC использовали подход тонкого клиента , при котором почти вся логика модели, представления и контроллера размещалась на сервере. При таком подходе клиент отправляет запросы гиперссылок или отправку форм контроллеру, а затем получает полную и обновленную веб-страницу (или другой документ) из представления; модель полностью существует на сервере. [42] Более поздние платформы позволили компонентам MVC частично выполняться на клиенте, используя Ajax для синхронизации данных.

См. также

[ редактировать ]
  1. ^ «Принципы чистой архитектуры дяди Боба Мартина» . Ютуб . 15 декабря 2015 г.
  2. ^ Реенскауг, Трюгве; Коплиен, Джеймс О. (20 марта 2009 г.). «Архитектура DCI: новый взгляд на объектно-ориентированное программирование» . Разработчик Артима . Архивировано из оригинала 23 марта 2009 года . Проверено 3 августа 2019 г. На более глубоком уровне существует структура, позволяющая отделить представление информации от взаимодействия с пользователем.
  3. ^ Бербек (1992): «... пользовательский ввод, моделирование внешнего мира и визуальная обратная связь с пользователем явно разделены и обрабатываются тремя типами объектов».
  4. ^ Дэвис, Ян. «Каковы преимущества MVC?» . Интернет-алхимия . Проверено 29 ноября 2016 г.
  5. ^ Модель–Представление–История контроллера . C2.com (11 мая 2012 г.). Проверено 9 декабря 2013 г.
  6. ^ Jump up to: а б с д и Заметки и исторические документы Трюгве Реенскауга, изобретателя MVC.
  7. ^ «Примечание о требованиях DynaBook», Trygve Reenskaug, 22 марта 1979 г., SysReq.pdf .
  8. ^ Jump up to: а б Фаулер, Мартин (2003). Шаблоны архитектуры корпоративных приложений . Pearson Education, Inc. ISBN  0-321-12742-0 .
  9. ^ Гольдберг, Адель (1984). Smalltalk-80: Интерактивная среда программирования . Аддисон-Уэсли. ISBN  0-201-11372-4 .
  10. ^ Краснер, Гленн Э.; Поуп, Стивен Т. (август – сентябрь 1988 г.). «Книга рецептов для использования парадигмы пользовательского интерфейса контроллера модель-представление в Smalltalk-80» . Журнал объектных технологий . 1 (3). Публикации SIGS: 26–49. Также опубликовано как « Описание парадигмы пользовательского интерфейса модель-представление-контроллер в системе Smalltalk-80 » (отчет), ParcPlace Systems; Проверено 5 июня 2012 г.
  11. ^ Эволюция MVC и других архитектур пользовательского интерфейса от Мартина Фаулера.
  12. ^ «Руководства по Ruby on Rails» . Проверено 19 марта 2022 г.
  13. ^ «Часто задаваемые вопросы по Django: Django выглядит как платформа MVC, но вы называете контроллер «представлением», а представление — «шаблоном». Почему вы не используете стандартные имена?» . Проверено 19 марта 2022 г.
  14. ^ Бербек, Стив (1992) Программирование приложений в Smalltalk-80: Как использовать модель-представление-контроллер (MVC)
  15. ^ ЛаЛонд, Уилф Р.; Пью, Джон Р. (1991). Внутри Smalltalk . США: Prentice-Hall Inc., с. 8. ISBN  0-13-467309-3 . Моделью может быть любой объект без ограничений.
  16. ^ Обзор системы WebObjects (PDF) . Купертино, Калифорния: Apple Computer, Inc., май 2001 г. с. 28. В WebObjects модель устанавливает и поддерживает соответствие между классом корпоративных объектов и данными, хранящимися в реляционной базе данных.
  17. ^ «Основы активной записи» . Рельсовые направляющие . Проверено 27 октября 2022 г. Это создаст Product модель, сопоставленная с таблицей продуктов в базе данных.
  18. ^ «Модели» . Документация Джанго . Проверено 27 октября 2022 г. Обычно каждая модель сопоставляется с одной таблицей базы данных.
  19. ^ ЛаЛонд, Уилф Р.; Пью, Джон Р. (1991). Внутри Smalltalk . США: Prentice-Hall Inc., с. 8. ISBN  0-13-467309-3 . Представление отвечает за визуальное представление объекта.
  20. ^ Обзор системы WebObjects (PDF) . Купертино, Калифорния: Apple Computer, Inc., май 2001 г. с. 28. Объекты просмотра представляют собой объекты, видимые в пользовательском интерфейсе (например, окна или кнопки).
  21. ^ ЛаЛонд, Уилф Р.; Пью, Джон Р. (1991). Внутри Smalltalk . США: Prentice-Hall Inc., с. 8. ISBN  0-13-467309-3 . [MVC] позволяет использовать представления как детали для сборки в более крупные блоки; новые виды представлений могут быть созданы с использованием существующих представлений в качестве подпредставлений.
  22. ^ Обзор системы WebObjects (PDF) . Купертино, Калифорния: Apple Computer, Inc., май 2001 г. с. 28. Объекты представления, как правило, допускают многократное использование и поэтому обеспечивают согласованность между приложениями.
  23. ^ «Обзор представления действий» . Рельсовые направляющие . Проверено 27 октября 2022 г. Шаблоны представления действий написаны с использованием встроенного Ruby в теги, смешанные с HTML.
  24. ^ «Шаблоны» . Документация Джанго . Проверено 27 октября 2022 г. Шаблон содержит статические части желаемого вывода HTML, а также специальный синтаксис, описывающий, как будет вставлен динамический контент.
  25. ^ «Часто задаваемые вопросы по Django: Django выглядит как платформа MVC, но вы называете контроллер «представлением», а представление — «шаблоном». Почему вы не используете стандартные имена?» . Проверено 27 октября 2022 г.
  26. ^ «Обзор представления действий» . Рельсовые направляющие . Проверено 27 октября 2022 г. Обычно представления разделяют свое имя с соответствующим действием контроллера...
  27. ^ ЛаЛонд, Уилф Р.; Пью, Джон Р. (1991). Внутри Smalltalk . США: Prentice-Hall Inc., с. 9. ISBN  0-13-467309-3 . ... представление явно знает о модели и контроллере.
  28. ^ Обзор системы WebObjects (PDF) . Купертино, Калифорния: Apple Computer, Inc., май 2001 г. с. 28. В качестве посредника между объектами модели и объектами представления в приложении выступает объект контроллера.
  29. ^ «Обзор представления действий» . Рельсовые направляющие . Проверено 27 октября 2022 г. В Rails веб-запросы обрабатываются контроллером действий и представлением действий. Обычно контроллер действий занимается связью с базой данных и выполнением действий CRUD, где это необходимо. Затем представление действий отвечает за компиляцию ответа.
  30. ^ Jump up to: а б «Часто задаваемые вопросы по Django: Django выглядит как платформа MVC, но вы называете контроллер «представлением», а представление — «шаблоном». Почему вы не используете стандартные имена?» . Проверено 27 октября 2022 г. В Django «представление» описывает, какие данные представлены, но представление обычно делегирует шаблон, который описывает, как представляются данные.
  31. ^ Простой пример архитектурного шаблона MVC (модель-представление-контроллер) для абстракции.
  32. ^ ЛаЛонд, Уилф Р.; Пью, Джон Р. (1991). Внутри Smalltalk . США: Prentice-Hall Inc., с. 8. ISBN  0-13-467309-3 . Контроллер отвечает за взаимодействие между пользователем и моделью/представлением. Он интерпретирует символы клавиатуры вместе с движениями мыши и щелчками.
  33. ^ ЛаЛонд, Уилф Р.; Пью, Джон Р. (1991). Внутри Smalltalk . США: Prentice-Hall Inc., с. 11. ISBN  0-13-467309-3 .
  34. ^ Обзор системы WebObjects (PDF) . Купертино, Калифорния: Apple Computer, Inc., май 2001 г. с. 28.
  35. ^ «Обзор представления действий» . Рельсовые направляющие . Проверено 27 октября 2022 г. Обычно представления разделяют свое имя с соответствующим действием контроллера...
  36. ^ «Написание просмотров» . Документация Джанго . Проверено 27 октября 2022 г.
  37. ^ Бушманн, Франк (1996) Шаблонно-ориентированная архитектура программного обеспечения .
  38. ^ Гамма, Эрих и др. (1994) Шаблоны проектирования
  39. ^ Мур, Дана и др. (2007) Профессиональные многофункциональные интернет-приложения: Ajax и за его пределами : «С момента появления MVC существовало множество интерпретаций этого шаблона. Эта концепция была адаптирована и применена самыми разными способами к широкому спектру систем и архитектур».
  40. ^ Jump up to: а б Алан Кей (23 мая 2003 г.). "действительно ли Squeak объектно-ориентирован?" . Список рассылки Squeak Foundation . Проверено 26 октября 2021 г.
  41. ^ ЛаЛонд, Уилф Р.; Пью, Джон Р. (1991). Внутри Smalltalk . Том. 2. США: Prentice-Hall Inc., стр. 8–9. ISBN  0-13-467309-3 .
  42. ^ Jump up to: а б Лефф, Авраам; Рэйфилд, Джеймс Т. (сентябрь 2001 г.). Разработка веб-приложений с использованием шаблона проектирования «модель/представление/контроллер» . Конференция IEEE Enterprise по распределенным объектным вычислениям. стр. 118–127.

Библиография

[ редактировать ]
Arc.Ask3.Ru: конец переведенного документа.
Arc.Ask3.Ru
Номер скриншота №: 99b12bbe7d9b025f2249c0ea3823a3fd__1722825000
URL1:https://arc.ask3.ru/arc/aa/99/fd/99b12bbe7d9b025f2249c0ea3823a3fd.html
Заголовок, (Title) документа по адресу, URL1:
Model–view–controller - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть. Любые претензии, иски не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, вы не можете использовать данный сайт и информация размещенную на нем (сайте/странице), немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, Денежную единицу (имеющую самостоятельную стоимость) можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)