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