Изучив пару сообщений в блогах на эту тему, я запутался, так как разные разработчики использовали разные реализации, но все они использовали единый интерфейс для репозитория.
Предположим, у нас есть следующий интерфейс для репозитория
interface Repository<T> {
fun get(): List<T>
fun save(items: List<T>)
}
Для конкретной реализации этого репозитория с помощью T = Users
, Repository.get()
загружает некоторые данные с сервера и кэширует их.
Для другого типа объекта скажем Bundles
Мне нужны не только эти методы, но и некоторые дополнительные методы, например. запрос локальной базы данных для определенного столбца.
В таком случае не могу понять, мне нужно создать отдельный интерфейс или добавить методы к существующему единому интерфейсу, в таком случае что делать с реализацией новых методов в других репозиториях которым эти методы не нужны? Он должен иметь одинаковый интерфейс для всех репозиториев. Лично я думаю, что можно создавать несколько интерфейсов для разных репозиториев, если я хорошо их абстрагирую.
Я подробно обсудил плюсы и минусы универсального репозитория в ответе это.
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: сообщения в блогах имеют свои ограничения. Как и книжные примеры. :-)
Точно. Что я имею в виду, если мы действительно не хотим писать одни и те же методы в нескольких репозиториях, мы все равно можем создать интерфейс верхнего уровня с универсальными методами, а затем создать другие интерфейсы для конкретных репозиториев. Что вы думаете об этом подходе?
@mallaudin: Если вы найдете в этом ценность, все должно быть в порядке. Лично я не сторонник создания интерфейсов ради интерфейсов. Для огромного многомодульного проекта это может быть уместно, чтобы поддерживать некоторую изоляцию между модулями. Или, если есть подключаемая система репозиториев, в которой потребитель может получить разные реализации, тогда подходит интерфейс. Но «всем репозиториям нужны интерфейсы» ИМХО излишне для небольших проектов, где когда-либо будет только одна реализация этого интерфейса.
@mallaudin: Единственное исключение — если ваш тестовый код (например, фиктивный генератор) требует, чтобы интерфейсы работали должным образом. В этом случае ваши интерфейсы предназначены для поддержки этой конкретной библиотеки.
Идеально. Я согласен с утверждением overkill
. Примерно такие же мысли на эту тему. Спасибо за ваше время @CommonsWare или тому, кому вы отвечаете под лейблом CommonsWare;)
Обратите внимание, что ваш вопрос очень близок к тому, что охвачено объяснением закрытого голосования «в основном основанным на мнении». Я попытался ответить на ваш вопрос с технической точки зрения.