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

    @Wan-Derer
    Зобанели на Хабре, волки́ ;((
    На второй схеме в БД хранятся записи, которые напрямую соотносятся с сущностями предметной области: пользователи, товары и пр. Эти сущности ты описываешь классами, а при создании объектов (экземпляров классов) ты наполняешь их конкретными данными из БД через интерфейс доступа (репозиторий).
    Когда программа запрашивает объект, репозиторий:
    - берёт класс (описание будущего объекта);
    - берёт из БД строку с данными;
    - сопоставляет имена полей класса с именами полей таблицы БД (мапит БД на класс);
    - создаёт экземпляр класса;
    - заполняет его поля данными из строки;
    - выдаёт готовый объект запрашивающему методу.
    Таким образом, классы + БД + репозиторий образуют модель (или домен) - это то что находится в центре первой схемы. Они представляют собой единое целое. Вся остальная программа не знает откуда взят объект - он просто получен через предоставленный интерфейс.
    А та БД, которая показана на периферии - это внешние данные, которые не являются частью твоей модели и которые ты запрашиваешь для отработки своих сервисов. Например, цена твоего товара - это его свойство и ты хранишь её у себя, это часть твоей модели. А когда тебе надо представить цену в другой валюте, тебе нужен курс для пересчёта, который не является частью твоей модели и который ты получаешь от внешнего сервиса. Во внешнем сервисе он хранится в БД (поэтому на схеме показана БД), а получаешь ты его через предоставленный тебе интерфейс: REST API, RPC, SOAP, нарочным на конях и т.п.
    Ответ написан
    Комментировать
  • Какое место БД в Чистой Архитектуре?

    sergey-gornostaev
    @sergey-gornostaev
    Седой и строгий
    Первая схема в вопросе - это так называемая гексагональная архитектура. Многослойную архитектуру в виде круга не рисуют как раз потому, что центра у неё нет, скорее концы или верх и низ.
    Ответ написан
    Комментировать
  • Какое место БД в Чистой Архитектуре?

    Где-то на одном из внутренних слоёв находится интерфейс для доступа к данным (репозиторий)
    А какой-нибудь из внешних слоёв этот интерфейс реализует.
    Ответ написан
    5 комментариев