Доступ к репозиторию для фрагмента презентера, в модели MVP и dagger2 - PullRequest
0 голосов
/ 18 декабря 2018

Я использую шаблон хранилища в mvp с кинжалом. В Область приложения Я связал свои RemoteDataSource и LocalDataSource:

@Binds
    @AppScope
    @Remote
    abstract MainDataSource RemoteDataSource(RemoteDataSource remoteDataSource);

    @Binds
    @AppScope
    @Local
    abstract MainDataSource LocalDataSource(LocalDataSource localDataSource);

И я ввел основной репозиторий в область приложения:

 @Inject
    public MainRepository(@Remote MainDataSource remoteDataSource,
                          @Local MainDataSource localDataSource) {
        this.remoteDataSource = checkNotNull(remoteDataSource);
        this.localDataSource = checkNotNull(localDataSource);
    }

Теперь в области видимости фрагмента в mainpresenter я передал MainRepository в своем подрядчике:

@MainFragScope
@Component(modules = {MainFragModule.class}, dependencies = AppComponent.class)
public interface MainFragComponent {

Конструктор презентатора:

private MainDataSource remoteDataSource;
private MainDataSource localDataSource;
 @Inject
    public MainPresenter(MainRepository repository, ArrayAdapter<String> typesAdapter) {
        this.repository = checkNotNull(repository);
        this.typesAdapter = checkNotNull(typesAdapter);
    }
@Override
public void loadChart(String district, String date, String type) {
    remoteDataSource.loadChart(district,date,type);
}

In RemoteDataSource У меня есть метод с именем loadChart, и его работа заключается в извлечении данных с удаленного сервера путем модернизации:

   public void loadChart(String district, String date, String type) {
        JsonObject joParam = new JsonObject();
        apiService.getAnalyticalReport(joParam).enqueue(new Callback<ResponseBody>() {
            @Override
            public void onResponse(Call<ResponseBody> call, Response<ResponseBody> response) {
                try {
                    if (response.isSuccessful()) {
                    // need presenter reference to pass response to it

После извлечения данных мне нужно вернуть эти данные с сервера для предъявителя фрагмента (MainPresenter) .IНужна ссылка на докладчика.Как я могу получить ведущего без уничтожения mvp ролей !!?Потому что в AppScope у меня нет доступа к MainPresenter .

1 Ответ

0 голосов
/ 18 декабря 2018

ИМХО по-родному, прежде чем решить связь между MainPresenter и remoteDataSource, было бы неплохо сначала решить тот, который между MainDataSource и MainRepository.Поскольку существует мост, похожий на этот,

Presenter -> MainRepository -> MainDataSource

MainDataSource и MainRepository может обеспечить интерфейс для общения пользователей.Также при таком способе MainDataSource или MainRepository не потребуется MainPresenter

Таким образом, передача данных будет выглядеть следующим образом:

  • MainRepository (реализует интерфейс A)-> MainDataSource (предоставляет интерфейс A)

  • MainPresenter (реализует интерфейс B) -> MainRepository (предоставляет интерфейс B)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...