Пример описания многослойной архитектуры, основанной на использовании наборов подслоёв и иерархии моделей данных

Моя цель - предложение широкого ассортимента товаров и услуг на постоянно высоком качестве обслуживания по самым выгодным ценам.

Эта статья обобщает и развивает описание многослойной архитектуры, представленное в статьях "Examples of Layered Application Architecture Based on the Use of Sublayers Sets and a Hierarchy of Data Models" и "Layered Application Architecture with a Homogeneous Layer Structure". Рассмотрен подход, позволяющий с единой позиции подойти к описанию основных используемых типов архитектуры приложений.

Основными задачами функционала приложения являются:

  • обеспечение работы пользователя при помощи визуального интерфейса;

  • обработка данных с использованием алгоритмов бизнес-логики;

  • обмен данными с внешними источниками данных;

  • обмен данными с внешними потребителями данных;

  • обеспечение хранения персистентных данных.

Приложение выполняет хотя бы одну из этих задач. Если приложение реализует более одной задачи, то логично будет разбить его на несколько слоёв и каждый слой будет выполнять одну из этих задач.

В наиболее общем случае архитектуру большинства приложений можно представить в виде однозвенного (single-tier) или многозвенного (multi-tier) приложения, в котором каждое звено (tier) представляет собой многослойное (layered) приложение. При помощи multi-tier архитектуру с layered структурой каждого звена (tier) можно описать основные используемые типы архитектур - Client-Server Architecture, Event-Driven Architecture, Pipes and filters Architecture, Service-oriented Architecture, Microservices Architecture.

Функционал single-tier application состоит из 3 основных групп:

  1. Функционал группы layered состоит из набора изолированных слоёв; каждый слой реализует специфические для него функции; взаимодействие происходит однонаправленно между соседними слоями.

  2. Функционал группы cross-cutting может использоваться всеми слоями приложения.

  3. Функционал группы dataflow реализует механизмы переноса данных, используемых приложением:

  • data mapping операции для переноса данных между моделями данных приложения;

  • data binding операции для связывания данных модели данных и визуального интерфейса;

  • data serialization операции для сериализации / десериализации данных при обмене данными с другими приложениями при помощи data transfer channel.

Работа функционала single-tier приложения может быть представлена в виде набора схем:

  • схема взаимодействия между слоями приложения;

  • схема взаимодействия между приложением и внешней инфраструктурой приложения (внешними источниками данных и внешними потребителями данных приложения);

  • схема переноса данных между моделями данных приложения.

Слой приложения состоит из функционала слоя и данных слоя. Данные слоя организованы в виде моделей данных.

Взаимодействие между слоями организовано иерархически: 1) взаимодействие между близлежащими слоями и между подслоями одного слоя происходит однонаправленно; 2) обмен данными между моделями данных близлежащих слоёв происходит двунаправленно.

С каждым слоем связана одна или несколько моделей данных. В общем случае приложение состоит из трёх слоёв - facade layer, logic layer и persistence layer.

Facade layer используется как фасад для доступа к функционалу приложения из других звеньев multi-tier application или из других приложений.

Logic layer реализует бизнес-логику работы приложения.

Persistence layer реализует функционал доступа к хранилищам персистентных данных (persistence data stores).

Каждый слой многослойной архитектуры приложения можно представить в виде набора подслоёв – подслоя фасада (façade sublayer) и одного или нескольких функциональных подслоёв. Подслой представляет собой функциональный блок, который реализует набор функциональных операций.

Facade sublayer - функциональный блок, который реализует фасад слоя и предоставляет доступ к функционалу слоя для вышележащего слоя приложения или для другого приложения.

Logic sublayer - функциональный блок, реализующий логику работы слоя.

Data access sublayer - функциональный блок, реализующий доступ к внешним источникам данных.

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

Рисунок 1. Структура подслоя
Рисунок 1. Структура подслоя

Рисунок 2. Схема взаимодействия между подслоями одного слоя
Рисунок 2. Схема взаимодействия между подслоями одного слоя

В общем случае приложение может взаимодействовать с набором внешних потребителей (external consumer) и набором внешних источников данных (external data source). External consumer выполняет функции потребителя данных (data consumer) и / или продюсера данных (data producer). External data source выполняет функции data consumer и / или data producer.

External data sources можно разделить на 2 типа – local data sources и remote data sources.

С local data sources приложение взаимодействует напрямую без использования драйверов и библиотек. Примерами local data sources являются local files and shared files in the local network, USB/COM/LPT ports.

Примерами remote data sources являются server databases, FTP servers, directory services (LDAP, Active Directory), web-services, message brokers, email and document storage systems.

Верхняя граница приложения (application upper boundary) разграничивает область функционала приложения и область external consumers. Нижняя граница приложения (application lower boundary) разграничивает область функционала приложения и область external data sources.

В структурной схеме приложения входной интерфейс приложения (application input interface) является шлюзом (gateway) для взаимодействия функционала приложения с external consumers. Примеры application input interface – visual interface (состоит из набора visual form) и data transfer interface (состоит из набора server-side endpoint (server-side socket)). Взаимодействие application input interface с функционалом приложения происходит при помощи генерации событий при действиях, совершаемых external consumers.

Если приложение не взаимодействует с external consumers, то application input interface представляет собой internal interface, который может состоять из набора таймеров и / или внутреннего расписания приложения. Таймеры и расписание запускают на выполнение функционал приложения по заданному в них временному отсчёту.

В структурной схеме приложения выходной интерфейс приложения (application output interface) является шлюзом (gateway) для взаимодействия функционала приложения с remote data sources. Элементами application output interface являются client-side network sockets, библиотеки доступа к источникам внешним данным, драйвера баз данных и драйвера внешних устройств.

Рисунок 3. Структурная схема single-tier приложения и его окружения – application boundaries, external consumer и external data sources
Рисунок 3. Структурная схема single-tier приложения и его окружения – application boundaries, external consumer и external data sources

Полная структурная схема single-tier приложения с учётом набора слоёв и взаимодействия между слоями, границ приложения и интерфейсов приложения представлена на рисунке 4.

Рисунок 4. Структура слоёв и схема  взаимодействия между слоями многослойного приложения
Рисунок 4. Структура слоёв и схема взаимодействия между слоями многослойного приложения

Facade sublayer в любом слое приложения предоставляет доступ извне к функционалу слоя.

Facade sublayer слоя facade layer это набор обработчиков событий визуальных форм или набор обработчиков запросов/сообщений, полученных от внешних потребителей.

Facade sublayer слоя logic layer реализует логику приложения, которая координирует выполнения операций бизнес-логики, внутренней логики приложения и обработки внешних данных. Функционал этого подслоя часто называют application logic.

Facade sublayer слоя persistence layer представляет собой набор объектов для доступа к внешним данным (data access objects).

Logic sublayer в любом слое приложения реализует внутреннюю логику этого слоя.

Logic sublayer слоя logic layer реализует бизнес-логику приложения. Функционал этого подслоя часто называют domain logic.

Data access sublayer в любом слое приложения реализует механизмы доступа и обработки внешних данных.

Для façade layer и logic layer доступ к внешним данным возможен тремя путями: 1) прямой доступ к local data sources (local files and shared files в локальной сети); 2) доступ через application output interface (доступ к web-services, message brokers, directory services, email and document storage systems); 3) доступ через persistence layer (доступ к базам данных).

Для persistence layer доступ и обработка внешних данных является основной задачей.

Данные single-tier application можно подразделить на несколько основных групп:

  • facade application data – данные, предоставляемые приложением для внешних потребителей;

  • internal application data – данные специфичные для логики работы приложения (как для бизнес-логики, так и для внутренней логики приложения);

  • external application data – данные, полученные приложением из внешних источников данных;

  • boundary application data – данные на границах приложения при взаимодействии приложения с внешними источниками данных и внешними потребителями данных; это данные в элементах управления визуальных форм или двоичные данные при обмене данными по data transfer channel.

Соответствие слоёв приложения и групп данных приложения:

  • facade application data используются в façade layer;

  • internal application data используются в слое приложения, если в этом слое есть подслой logic sublayer;

  • external application data используются в слое приложения, если в этом слое есть подслой data access sublayer.

Рисунок 5. Схема обмена данными для приложения, реализующего как бизнес-логику, так и взаимодействие с внешними источниками данных
Рисунок 5. Схема обмена данными для приложения, реализующего как бизнес-логику, так и взаимодействие с внешними источниками данных

Рисунок 6. Схема обмена данными для приложения, реализующего только бизнес-логику
Рисунок 6. Схема обмена данными для приложения, реализующего только бизнес-логику

Рисунок 7. Схема обмена данными для приложения, реализующего только взаимодействие с внешними источниками данных
Рисунок 7. Схема обмена данными для приложения, реализующего только взаимодействие с внешними источниками данных

Источник: https://habr.com/ru/post/667922/


Интересные статьи

Интересные статьи

Привет, Хабр! Меня зовут Андрей Демин, я CEO проекта Tada.team. Сегодня я хотел бы поговорить о нюансах нашей работы над собственной платформой. Она представляет собой гибрид мессенджера и таск-трекер...
Данные о местоположении — это важная категория данных, с которыми часто приходится иметь дело в проектах машинного обучения. Они, как правило, дают дополнительный контекс...
Привет, Хабр! Сегодня хотим представить вам некоммерческий открытый датасет, собранный командой студентов магистратуры «Наука о данных» НИТУ МИСиС и Zavtra.Online (подразделении SkillFact...
Однажды мне потребовалось получить из сырых ОСМ данных чистый сабсет города (потому что так удобно, компактно и просто красиво). К моему удивлению я не нашел готового рецепта, из-за чего для выпо...
За последние несколько лет базы данных временных рядов (Time-series databases) превратились из диковинной штуки (узкоспециализированно применяющейся либо в открытых системах мониторинга (и пр...