Почему todo-mvp-dagger, а не todo-mvvm-dagger? - PullRequest
0 голосов
/ 31 декабря 2018

https://developer.android.com/topic/libraries/architecture/

В плане архитектуры Android почему кинжал основан на архитектуре mvp, а не на архитектуре MVVM?Это потому, что он не подходит для архитектуры MVVM?Или другие причины?

1 Ответ

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

Кинжал подходит для любой архитектуры, потому что это не архитектурно-зависимый компонент.Это библиотека внедрения зависимостей.Я не знаю, почему образец проекта не включает MVVM-Dagger реализацию.

Вот пример использования кинжала с архитектурой MVVM.

Вот Module, который предоставляет ViewModel и другие несколько объектов.

@Module(includes = {
        RecyclerViewModule.class,
        ActivityModule.class
})
class MainActivityModule {

    private final MenuAdapter.Callback menuAdapterCallback;

    MainActivityModule(MenuAdapter.Callback menuAdapterCallback) {
        this.menuAdapterCallback = menuAdapterCallback;
    }

    @Provides
    MainActivityViewModel provideMainActivityViewModel(
            FragmentActivity fragmentActivity,
            MainActivityViewModelFactory factory
    ) {

        return ViewModelProviders.of(fragmentActivity, factory)
                .get(MainActivityViewModel.class);
    }


    @Provides
    MenuAdapter.Callback provideMenuAdapterCallback() {
        return menuAdapterCallback;
    }

    @Provides
    MainActivityViewModelFactory provideViewModelFactory(MenuAdapter menuAdapter) {
        return new MainActivityViewModelFactory(menuAdapter);
    }


}

и соответствующий компонент

@Component(modules = MainActivityModule.class)
public interface MainActivityComponent {
    void inject(MainActivity mainActivity);
}

и внедрение компонента.

public class MainActivity extends BaseAppCompatActivity implements MenuAdapter.Callback {


    @Inject
    MainActivityViewModel viewModel;

    @Inject
    DividerItemDecoration divider;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        ActivityMainBinding binding = DataBindingUtil.setContentView(this, R.layout.activity_main);
        Toolbar toolbar = findViewById(R.id.toolbar);
        setSupportActionBar(toolbar);

        DaggerMainActivityComponent.builder()
                .activityModule(new ActivityModule(this))
                .mainActivityModule(new MainActivityModule(this))
                .build()
                .inject(this);

        binding.include.rvMenu.addItemDecoration(divider);

        binding.setViewModel(viewModel);

    }


}

Полный проект можно получить по адресу здесь .Это простой пример проекта MVVM + Dagger2 + Retrofit + RxJava + DataBinding.Не стесняйтесь клонировать / загружать для запуска проекта.

...