Руководства
Создание слоя данных каталога
Доменный Repository, remote и cache DataSource, преобразование, наблюдение и завершение.
Создание слоя данных каталога
Объявите доменный контракт
Разместите CatalogRepository, CatalogData и доменные сущности в Domain-слое. Предоставьте только текущие данные, их Stream и операции бизнеса вроде synchronize().
Объявите технические контракты
Создайте CatalogRemoteDataSource для сетевых записей и CatalogCacheDataSource для локальных. DTO остаются рядом с технической границей, которой они принадлежат.
Реализуйте Repository
Разрешите оба контракта в конструкторе. Прочитайте кеш, получите remote-представление, преобразуйте его в доменные сущности, обновите кеш и передайте в setData только доменные данные.
Выберите политику конкурентности
Если refresh могут пересекаться, явно выберите сериализацию, отмену старой работы, проверку revision или last-completion-wins. Базовый Repository не угадывает это решение.
Соберите и закройте граф
Composition Root создаёт источники, контейнер и Repository. Сначала остановите потребителей, затем закройте Repository и после него — клиентов источников.