Библиотека абстракций для модернизации - PullRequest
0 голосов
/ 09 июня 2019

Я пишу слой абстракции поверх сетевой библиотеки Retrofit, чтобы мы могли изменить Retrofit в любое время без особого влияния на код приложения.

enter image description here

И мы обычно пишем интерфейс и реализацию Retrofit для взаимодействия с сетью. enter image description here

Чтобы использовать Retrofit , мы создаем интерфейс Java, который отображается на серверный API, и получаем его экземпляр, используя класс Retrofit, как показано ниже

public interface GitHubService {
  @GET("users/{user}/repos")
  Call<List<Repo>> listRepos(@Path("user") String user);
}

Класс Retrofit генерирует реализацию интерфейса GitHubService.

Retrofit retrofit = new Retrofit.Builder()
    .baseUrl("https://api.github.com/")
    .build();

GitHubService service = retrofit.create(GitHubService.class);

Позвоните на удаленный веб-сервер.

Call<List<Repo>> repos = service.listRepos("octocat");

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

Я надеюсь, что донесу мысль о том, что способ, которым мы используем Retrofit, немного отличается, потому что он ожидает интерфейс с аннотациями, о которых наше приложение не знает. В противном случае наше приложение будет тесно связано с аннотациями Retrofit и такими классами, как Call (см. Тип возврата).

1 Ответ

0 голосов
/ 15 июня 2019

Похоже, вы просто планируете написать Retrofit поверх Retrofit.Как правило, вы не обязаны модернизировать определенные классы, такие как «Call».Отличительной особенностью Retrofit является его гибкость, у него есть адаптеры практически для всего.Вы можете расширить их и получить любое желаемое поведение:

Например, вы можете заставить интерфейс Retrofit возвращать определенный объект вместо Call, используя CallAdapter.Factory. Например:

List<Repo> listRepos(@Path("user") String user);

Вот пример использования пример .Не уверен, что это ваш случай, просто чтобы показать идею.

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

...