Size: a a a

Android Architecture

2020 October 07

P

Pavel in Android Architecture
В данном случае речь про установки:
"Репозиторий может объединять дата-сорсы" и
"Репозиторий абстрагирует один дата-сорс".
В первом случае возникает вопрос: "Какие"? Во втором случае вопросов не возникает.
источник

RK

Ruslan Kim in Android Architecture
Pavel
Не будем забывать, что clean - это прежде всего, простота разработки и поддержки кода.
Если возникает необходимость полдня чесать репу и думать что куда поместить - то нафиг тогда этот clean?
По опыту репозиторий лучше воспринимать как тонкую обертку (=data source).
Объясню почему.
Вот вы, джедай клина, пишите репозиторий, который объединяет 2 дата-сорса (net и db). Ok, всё круто.
Потом приходит другой разраб. Ага, надо перед запросом прочитать настройку. Чешет репу, куда поместить дата сорс настроек. Аха, настройка связана с данным запросом, значит в репозиторий. Потом другой разраб хочет ещё один запрос сделать. Чешет репу, добавляет в тот же репозиторий. Третий разраб хочет ещё писать настройки ..

В итоге в репозитории получаются инжнкекты левых дата-сорсов, других репозиториев и другой хрени.
А потом... Этот репозиторий понадобилось переиспользовать, но без настроек. Что делает 4-й разраб? Правильно, добавляет флажки в параметры методов. Или того хуже, добавляет state в репозиторий.

Так что лучше всё-таки дать установку, что репозиторий - тонкая обертка. Чтобы не чесать репу что в него пихать.
тогда для каждой фичи нужен отдельный репо, без переиспользования
источник

VP

Vitaly Peryatin in Android Architecture
Pavel
В данном случае речь про установки:
"Репозиторий может объединять дата-сорсы" и
"Репозиторий абстрагирует один дата-сорс".
В первом случае возникает вопрос: "Какие"? Во втором случае вопросов не возникает.
У меня бы возник вопрос: "А почему Interactor отвечает за кеширование одних и тех же данных? "
источник

VP

Vitaly Peryatin in Android Architecture
Но каждый по-своему отклоняется от Clean
Да и в Clean не описано все максимально точно, а даже от текущего описания многие отклоняются
Кому-то так удобнее, кому-то по-другому
источник

P

Pavel in Android Architecture
Ruslan Kim
тогда для каждой фичи нужен отдельный репо, без переиспользования
Репозитории - это слой данных. Его имплементация может быть вообще в отдельном модуле. И он как раз может переиспользоваться. Сущность, которая работает с несколькими дата-сорсами (репозиториями) - это скорее интерактор, но на самом нижем уровне. В бизнес-логике может быть несколько слоёв. На нижнем уровне может быть интерактор, который работает с несколькими репозиториями. Но этот слой уже принадлежит фиче, а не имплементации репозитория
источник

A

ABI in Android Architecture
Pavel
Репозитории - это слой данных. Его имплементация может быть вообще в отдельном модуле. И он как раз может переиспользоваться. Сущность, которая работает с несколькими дата-сорсами (репозиториями) - это скорее интерактор, но на самом нижем уровне. В бизнес-логике может быть несколько слоёв. На нижнем уровне может быть интерактор, который работает с несколькими репозиториями. Но этот слой уже принадлежит фиче, а не имплементации репозитория
картинку уже давно бы нарисовал )
источник

IN

Ilya Nikolaev in Android Architecture
Почему нельзя написать врапер для репозитория и кешировать в нем?)
источник

IN

Ilya Nikolaev in Android Architecture
Декомпозиция , все дела.
источник

IN

Ilya Nikolaev in Android Architecture
Хочешь используй чистый репо, хочешь обертку над ним
источник

RK

Ruslan Kim in Android Architecture
Pavel
Репозитории - это слой данных. Его имплементация может быть вообще в отдельном модуле. И он как раз может переиспользоваться. Сущность, которая работает с несколькими дата-сорсами (репозиториями) - это скорее интерактор, но на самом нижем уровне. В бизнес-логике может быть несколько слоёв. На нижнем уровне может быть интерактор, который работает с несколькими репозиториями. Но этот слой уже принадлежит фиче, а не имплементации репозитория
Я говорил о том, что каждая фича в своем домене держит один или несколько интерфейсов репозитория, под каждый кейс. Без переиспользования. Надо сохранять данные - один репо. Надо сохранять еще и настройки и т.д. - другой.
источник

P

Pavel in Android Architecture
Ilya Nikolaev
Хочешь используй чистый репо, хочешь обертку над ним
Можно враппер, можно делегат. Но он уже должен быть на уровне domain конкретной фичи
источник

P

Pavel in Android Architecture
Ruslan Kim
Я говорил о том, что каждая фича в своем домене держит один или несколько интерфейсов репозитория, под каждый кейс. Без переиспользования. Надо сохранять данные - один репо. Надо сохранять еще и настройки и т.д. - другой.
Где имплементация этих репозиториев?
источник

RK

Ruslan Kim in Android Architecture
Pavel
Где имплементация этих репозиториев?
в дате
источник

P

Pavel in Android Architecture
Вот это и не хорошо. Потому что дата живёт отдельно от фичи.
источник

P

Pavel in Android Architecture
Каждая фича может иметь свои настройки, кеш и т.д.
источник

RK

Ruslan Kim in Android Architecture
Pavel
Вот это и не хорошо. Потому что дата живёт отдельно от фичи.
она не живет отдельно, фича делится на слои, там и дата, и домен, и все остальное
источник

RK

Ruslan Kim in Android Architecture
Просто надо определиться что такое репо - интерфейс источника или объединение источников. Если второе - то вся логика работы с данными должна быть в имплементации репо, в том числе и настройки, например. Если первый вариант - тогда да, надо это делать в интеракторе, но тогда не надо называть интерфейс "репозиторием". Разве не так?
источник

P

Pavel in Android Architecture
Тут тогда вопрос терминологии.
В моём понимании дата = имплементация репозитория, т.е. то, где дёргается ретрофит, рум, где юзается appContext и т.д.
источник

P

Pavel in Android Architecture
Интерфейс репозитория принадлежит бизнес-логике фичи
источник

P

Pavel in Android Architecture
Если репозиторий объединяет дата сорсы и его имплементация принадлежит фиче, это тогда то, что я выше называл нижнем слоем бизнес-логики
источник