Слой представления
Слой представления (Presentation layer) – это пользовательский интерфейс для Клиентов OpenEdge в вашем приложении. Этот слой взаимодействует с слоем Business Components для получения и отображения данных конечным пользователям. Слой представления, являясь отдельным клиентским процессом, использует общую для многих пользовательских интерфейсов архитектуру MVP (Model-View-Presenter). MVP – это шаблон проектирования пользовательского интерфейса, который был разработан для облегчения автоматического модульного тестирования и улучшения разделения ответственности в презентационной логике (отделения логики от отображения). Шаблон включает в себя следующие компоненты:
- Модель (англ. Model) – представляет собой интерфейс, определяющий данные для отображения или участвующие в пользовательском интерфейсе иным образом.
- Представление (англ. View) – это интерфейс, который отображает данные (Модель) и маршрутизирует пользовательские команды (или события) Presenter-у, чтобы тот действовал над этими данными.
- Presenter – действует над Моделью и Представлением. Он извлекает данные из хранилища (Модели) и форматирует их для отображения в Представлении.
Слой представления включает в себя набор компонент сервисного адаптера (Service Adapter), каждый из которых имеет доступ к бизнес-компонентам (Business Components) через сервисные интерфейсы (Service Interface).
Model
Компонент Модель определяет и управляет клиентской версией бизнес-сущности. Для каждой бизнес-сущности к которой получает доступ Клиент, должны существовать соответствующие клиентские бизнес-сущности (Client Business Entity). Иными словами, для работы Клиента каждая клиентская бизнес-сущность должна воспроизводить тот же тип данных, что имеет бизнес-сущность на сервере. Компонент Модель предоставляет данные для Представления (View) и управляет данными для Presenter-а. Модель также получает доступ к бизнес-компонентам через специализированные сервисные адаптеры, которые в свою очередь написаны для вызова определённых сервисных интерфейсов.
Компонент Модель оперирует данными в формате, который соответствует их логическому описанию в связанной бизнес-сущности. Также он управляет данными на Клиенте с любым пользовательским интерфейсом, в том числе, с клиентской логикой, где пользовательский интерфейс не предусмотрен.
View
Компонент отвечает за отображение контента в пользовательском интерфейсе. Он выводит на экран пользователя поля, таблицы, кнопки управления и прочие элементы пользовательского интерфейса и отвечает за сопоставление данных, получаемых из клиентских бизнес-сущностей.
Это компонент, который абсолютно независим от других частей приложения, в том числе отвечающих за выборку данных и бизнес-логику.
Presenter
Компонент Presenter координирует данные Модели и события между различными элементами Представления. Этот компонент можно рассматривать как связующее звено между Моделью и Представлением.
Общая логика в Presenter-е (например, какие операции должны быть выполнены в зависимости от типа события) должна быть многократно используемой, чтобы её можно было применить к различным Представлениям.
Если вам необходимо заменить пользовательский интерфейс на другой, например, когда приложение должно работать на другой платформе, то вы не должны изменять никакую другую часть приложения, кроме части Presenter-а, отвечающую за интерфейс.
Service Adapter
Компонент сервисный адаптер (Service Adapter) позволяет Клиентам OpenEdge и промышленным сервисам (Enterprise Services) получать доступ к бизнес-компонентам. Каждый сервисный адаптер специфичен для конкретной реализации слоёв Presenter и Enterprise Services. Чтобы получить доступ к бизнес-сущности, задаче или рабочему процессу, Клиент OpenEdge должен сделать запрос на обслуживание через сервисный интерфейс. Каждый тип Клиента имеет собственный сервисный адаптер, который соответствует вызываемому сервисному интерфейсу. Сервисный адаптер позволяет изменять вызывающую последовательность или формат данных для запроса без необходимости изменения любого кода за исключением того, который определён в конкретном адаптере. Он также может быть использован для обнаружения сервиса во время выполнения.
Как много сервисных интерфейсов и сервисных адаптеров понадобится для вашего приложения зависит от того, насколько идентичны клиентские и серверные бизнес-сущности.