Данная статья продолжает тему статьи «Когда ни туда, ни сюда, или в поисках оптимальной границы Domain слоя».
Во многих бизнес приложениях для сущности User выдвигается стандартное требование: «При регистрации пользователя нужно проверять, что записываемый email уникальный, ни у одного другого пользователя такого больше нет».
Подобная задача предельно типовая и поэтому должна иметь типовое решения. Далее рассматривается решение, основанное на трёхслойной архитектуре, в которой каждый слой (layer) состоит из трёх подслоёв (sublayer). Такая архитектура была описана в статье «Пример описания многослойной архитектуры, основанной на использовании наборов подслоёв и иерархии моделей данных».
В качестве примера рассмотрим веб-сервис, который получает запрос на создание нового пользователя и сохранение его данных в базе данных.
При получении запроса функционал веб-сервиса десериализует данные пользователя в объект типа UserDTO. В этом объекте в поле Email находится адрес электронной почты нового пользователя. Этот адрес электронной почты должен быть уникален на уровне соответствующего поля таблицы Users, в которой в базе данных хранятся данные пользователей приложения.
Схема работы приложения для use case создания нового пользователя представлена на рисунке.

Внешний запрос к веб-сервису на создание нового пользователя обрабатывается в facade layer и далее идёт вызов функционала application service, который является фасадом бизнес-логики приложения (logic layer).
Use case создания нового пользователя реализуется в виде двух вызовов функционала logic layer.
-
Application service вызывает функционал объекта типа EmailValidator для валидации адреса электронной почты нового пользователя приложения.
-
Если валидация прошла успешно, то application service вызывает функционал persistence service для вставки данных нового пользователя в базу данных.
Объект типа EmailValidator реализует следующий функционал.
-
Проверяет значение из поля Email объекта типа UserDTO на соответствие формату адреса электронной почты.
-
Вызывает функционал persistence service для формирования запроса к базе данных для проверки уникальности значения из поля Email объекта типа UserDTO на уровне соответствующего поля таблицы Users, в которой в базе данных хранятся данные пользователей приложения.
ссылка на оригинал статьи https://habr.com/ru/articles/798465/
Добавить комментарий