Различия

Показаны различия между двумя версиями страницы.

Ссылка на это сравнение

develop:docs:mvc [2021/05/20 15:05]
mirocow создано
develop:docs:mvc [2021/05/20 15:10] (текущий)
mirocow
Строка 1: Строка 1:
 {{:develop:docs:mvvp.png?400|}} {{:develop:docs:mvvp.png?400|}}
 +
 +VC (Model-View-Controller) — фундаментальный шаблон проектирования, целью которого является отделение логики интерфейса пользователя от логики программирования. MVC имеет множество вариантов реализации. Существуют модификации шаблона, самые известные из них MVP и MVVM.
 +Ниже описана концепция архитектурного шаблона MVC и его модификаций MVP и MVVM. Приведена концепция шаблона MVA, основанная на паттернах MVC, MVP и MVVM и адаптирована под язык ABAP.
 +
 +====== Model-View-Controller ======
 +
 +{{:develop:docs:mvc.png?400|}}
 +
 +Model (модель) — содержит модель данных и бизнес-логику. Иными словами, модель делает все для чего создавалась программа.
 +View (представление) — интерфейс взаимодействия с пользователем. Представление отображает часть данных модели пользователю. В некоторых случаях, представление может иметь свою бизнес-логику.
 +Controller (контроллер) — связывает модель и представление между собой. Контроллер обрабатывает события пользователя, управляет состоянием модели.
 +Схема работы MVC
 +Точкой входа в программу является контроллер. Контроллер имеет ссылки на модель и на представление. Контроллер подписывается на события представления, а представление подписывается на события модели.
 +Когда пользователь совершает какие-нибудь действия, управление переходит к контроллеру и контроллер воздействует на модель.
 +При изменении модели идет воздействие контроллер получает соответствующее событие и воздействует на представление для обновления данных.
 +В реализации MVC независимой частью является модель, она ничего не знает о представлении и контроллере.
 +Если программа содержит несколько представлений (например, несколько ABAP-экранов), то для каждого представления требуется создать свой контроллер. При этом, допускается использовать одну и туже модель в разных контроллерах и представлениях.
 +Реализация MVC в ABAP подробно описана в книге Design Patterns in ABAP Objects с примерами ALV и Web Dynpro представлений.
 +
 +====== Model-View-Presenter ======
 +
 +{{:develop:docs:mvp.png?400|}}
 +
 +Компоненты Model и View в шаблоне MVP аналогичны соответствующим компонентам модели MVC. Основной целью данного шаблона является отделения модели от представления. В шаблоне MVP информация об изменении модели поступает на презентер (Presenter), который воздействует на представление для обновления состояния.
 +Схема работы MVP
 +Отсутствие связи между моделью и представлением позволяет сделать абстракцию представления. Реализовать данный паттерн можно путем выделения интерфейса представления IView. Интерфейс будет содержать набор методов и свойств, необходимых презентеру, сам презентер будет подписываться на события представления и вызывать методы для его обновления. Абстрагирование представления полезно в задачах, где требуется отобразить один и тот же набор данных в разных представлениях. Например, выводить отчет в разных форматах: ALV, PDF, EXCEL.
 +
 +====== Model-View-ViewModel ======
 +
 +{{:develop:docs:mvvm.png?400|}}
 +
 +Шаблон MVVM предназначен для разработки в WPF на языке C#. Но его идею можно применять и в ABAP. Идея данного паттерна заключается в отделении слов друг от друга. Слой View знает только о ViewModel, ViewModel знает только о Model.
 +Схема работы MVVM
 +Представление не требует реализации IView, для получения данных ему требуется передать ссылку на источник данных (DataContext). ViewModel является посредником между передачей данных от модели в DataContext, элементы представления ссылаются на источник данных через биндинги (Binding).
 +Важное отличие MVVM от MVC и MVP то, что представление в MVVM может менять модель напрямую за счет двухстороннего биндинга. В случае с MVC и MVP представление имеет доступ «только на чтение» к данным модели.
 +
 +====== Model-View-Application ======
 +
 +Особенностью ABAP приложений является то, то представление может обновиться только после действий пользователя. Даже если какой-нибудь асинхронный процесс поменяет модель, то инициировать обновление представление он не сможет. Данная особенность позволяет ослабить связь модель-представление и делегировать функцию обновления представления самому представлению. Иными словами, представление само должно решать, когда надо обновить себя, а когда нет.
 +Если взять за основу паттерны MVP и MVVM и принять во внимание отсутствие обратной связи от модели до представления, то можно спроектировать новый архитектурный шаблон MVA.
 +Схема работы MVA
 +
 +====== Концепция MVA ======
 +
 +Реализация MVA основана на объектно-ориентированном подходе, где на каждый слой архитектуры будет реализован один или несколько классов. Каждый из слоев обладает рядом свойств.
 +Представление (View и IView):
 +
 +MVA работает с абстракцией представления IView. Все классы View должны содержать реализацию IView.
 +IView содержит события, которые требуют взаимодействия с моделью
 +IView содержит контекст — ссылка на данные модели, которые необходимо отобразить пользователю
 +View может содержать бизнес-логику, которая не требует взаимодействия с моделью. Например, если требуется реализовать из ALV проваливание в карточку контрагента, то данная логика будет относиться к представлению.
 +
 +
  • develop/docs/mvc.txt
  • Последнее изменение: 2021/05/20 15:10
  • mirocow