@vlados117

Какое место БД в Чистой Архитектуре?

В книге Роберта Мартина "Чистая Архитектура" есть круговые схемы архитектуры со слоями. На них в центре находятся критические бизнес правила как самые высокоуровневые, а на внешних слоях самые низкоуровневые части по типу UI.
И также наравне с UI стоит и БД.
spoiler
64b0eacbbcf60197187338.png
Но при этом есть такие схемы
spoiler
64b0eb0760b0b048087493.png

Я не понимаю как работает первая схема.
Когда я пытаюсь реализовать Архитектуру, например Апи, у меня Контроллер получает на вход Сервис, а Сервис получает Репозиторий, разумеется через интерфейсы. Получается у меня реализация по второй схеме. Но при этом получается что в самом центре стоит БД.
Может быть это зависит от того, какая структура у проекта? Если это монолит, то в центре будет БД, а если микросервис, то нет?
  • Вопрос задан
  • 322 просмотра
Решения вопроса 1
vabka
@vabka
Токсичный шарпист
Где-то на одном из внутренних слоёв находится интерфейс для доступа к данным (репозиторий)
А какой-нибудь из внешних слоёв этот интерфейс реализует.
Ответ написан
Пригласить эксперта
Ответы на вопрос 3
sergey-gornostaev
@sergey-gornostaev
Седой и строгий
Первая схема в вопросе - это так называемая гексагональная архитектура. Многослойную архитектуру в виде круга не рисуют как раз потому, что центра у неё нет, скорее концы или верх и низ.
Ответ написан
Комментировать
@Wan-Derer
Зобанели на Хабре, волки́ ;((
На второй схеме в БД хранятся записи, которые напрямую соотносятся с сущностями предметной области: пользователи, товары и пр. Эти сущности ты описываешь классами, а при создании объектов (экземпляров классов) ты наполняешь их конкретными данными из БД через интерфейс доступа (репозиторий).
Когда программа запрашивает объект, репозиторий:
- берёт класс (описание будущего объекта);
- берёт из БД строку с данными;
- сопоставляет имена полей класса с именами полей таблицы БД (мапит БД на класс);
- создаёт экземпляр класса;
- заполняет его поля данными из строки;
- выдаёт готовый объект запрашивающему методу.
Таким образом, классы + БД + репозиторий образуют модель (или домен) - это то что находится в центре первой схемы. Они представляют собой единое целое. Вся остальная программа не знает откуда взят объект - он просто получен через предоставленный интерфейс.
А та БД, которая показана на периферии - это внешние данные, которые не являются частью твоей модели и которые ты запрашиваешь для отработки своих сервисов. Например, цена твоего товара - это его свойство и ты хранишь её у себя, это часть твоей модели. А когда тебе надо представить цену в другой валюте, тебе нужен курс для пересчёта, который не является частью твоей модели и который ты получаешь от внешнего сервиса. Во внешнем сервисе он хранится в БД (поэтому на схеме показана БД), а получаешь ты его через предоставленный тебе интерфейс: REST API, RPC, SOAP, нарочным на конях и т.п.
Ответ написан
Комментировать
@0x131315
Это чистая теория, ее сложно связать с практикой без достаточного опыта
Суть этой архитектуры - снизить связность кода, устранить зависимости, для снижения сложности, устранения побочных эффектов, облегчения поддержки, упрощения модификации кода
Неплохой краткий обзор можно посмотреть тут, на простом примере сразу на свое место встанут все эти слои
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы