Единый интерфейс шаблона репозитория в Android

Изучив пару сообщений в блогах на эту тему, я запутался, так как разные разработчики использовали разные реализации, но все они использовали единый интерфейс для репозитория.

Предположим, у нас есть следующий интерфейс для репозитория

interface Repository<T> {
    fun get(): List<T>
    fun save(items: List<T>)
}

Для конкретной реализации этого репозитория с помощью T = Users, Repository.get() загружает некоторые данные с сервера и кэширует их.

Для другого типа объекта скажем Bundles Мне нужны не только эти методы, но и некоторые дополнительные методы, например. запрос локальной базы данных для определенного столбца.

В таком случае не могу понять, мне нужно создать отдельный интерфейс или добавить методы к существующему единому интерфейсу, в таком случае что делать с реализацией новых методов в других репозиториях которым эти методы не нужны? Он должен иметь одинаковый интерфейс для всех репозиториев. Лично я думаю, что можно создавать несколько интерфейсов для разных репозиториев, если я хорошо их абстрагирую.

Обратите внимание, что ваш вопрос очень близок к тому, что охвачено объяснением закрытого голосования «в основном основанным на мнении». Я попытался ответить на ваш вопрос с технической точки зрения.

CommonsWare 29.05.2019 18:25

Я подробно обсудил плюсы и минусы универсального репозитория в ответе это.

Amit Joshi 30.05.2019 08:17
0
2
334
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

do I need to create a separate interface or add methods to existing single interface

Вы можете делать все, что вам нравится. Android ничего не знает о репозиториях и не накладывает никаких ограничений.

В своей работе я в первую очередь не создаю общий интерфейс (подобный тому, который вы показываете). Я также не могу вспомнить проект, над которым я работал, где разработчики создали общий интерфейс репозитория. Я уверен, что некоторые люди создают такой интерфейс, но ОС не требует его.

Personally, I think, its ok to create multiple interfaces for different repositories as long as I abstract them nicely.

Вы можете сделать это.

Боже! Может возникнуть путаница из-за того, что почти все сообщения в блогах создали репозиторий только для одного варианта использования.

mallaudin 29.05.2019 18:25

@mallaudin: сообщения в блогах имеют свои ограничения. Как и книжные примеры. :-)

CommonsWare 29.05.2019 18:26

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

mallaudin 29.05.2019 18:28

@mallaudin: Если вы найдете в этом ценность, все должно быть в порядке. Лично я не сторонник создания интерфейсов ради интерфейсов. Для огромного многомодульного проекта это может быть уместно, чтобы поддерживать некоторую изоляцию между модулями. Или, если есть подключаемая система репозиториев, в которой потребитель может получить разные реализации, тогда подходит интерфейс. Но «всем репозиториям нужны интерфейсы» ИМХО излишне для небольших проектов, где когда-либо будет только одна реализация этого интерфейса.

CommonsWare 29.05.2019 18:31

@mallaudin: Единственное исключение — если ваш тестовый код (например, фиктивный генератор) требует, чтобы интерфейсы работали должным образом. В этом случае ваши интерфейсы предназначены для поддержки этой конкретной библиотеки.

CommonsWare 29.05.2019 18:31

Идеально. Я согласен с утверждением overkill. Примерно такие же мысли на эту тему. Спасибо за ваше время @CommonsWare или тому, кому вы отвечаете под лейблом CommonsWare;)

mallaudin 29.05.2019 18:36

Другие вопросы по теме