Различия
Показаны различия между двумя версиями страницы.
| 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 может содержать бизнес-логику, | ||
| + | |||
| + | |||