一文说透 Android 应用架构 MVC、MVP、MVVM 和 组件化,Android基础入门教程

然后,就是我们的View层的代码,同样,我对代码做了删减:

@Route(path = BaseConstants.EYEPETIZER_MENU)
public class HomeActivity extends CommonActivity implements HomeContract.IView {

// 实例化Presenter
private HomeContract.IPresenter presenter;
{
presenter = new HomePresenter(this);
}

@Override
protected int getLayoutResId() {
return R.layout.activity_eyepetizer_menu;
}

@Override
protected void doCreateView(Bundle savedInstanceState) {
// …
// 使用Presenter请求数据
presenter.requestFirstPage();
loading = true;
}

private void configList() {
// …
getBinding().rv.addOnScrollListener(new RecyclerView.OnScrollListener() {
@Override
public void onScrolled(RecyclerView recyclerView, int dx, int dy) {
// 请求下一页的数据
presenter.requestNextPage();
}
}
});
}

// 当请求到结果的时候在页面上做处理,展示到页面上
@Override
public void setFirstPage(List itemLists) {
loading = false;
homeAdapter.addData(itemLists);
}

// 当请求到结果的时候在页面上做处理,展示到页面上
@Override
public void setNextPage(List itemLists) {
loading = false;
homeAdapter.addData(itemLists);
}

@Override
public void onError(String msg) {
ToastUtils.makeToast(msg);
}

// …
}

从上面的代码中我们可以看出实际在View中也要维护一个Presenter的实例。 当需要请求数据的时候会使用该实例的方法来请求数据,所以,在开发的时候,我们需要根据请求数据的情况,在Presenter中定义接口方法。

实际上,MVP的原理就是View通过Presenter获取数据,获取到数据之后再回调View的方法来展示数据。

2.3 MVC 和 MVP 的区别

  1. MVC 中是允许 Model 和 View 进行交互的,而MVP中,Model 与 View 之间的交互由Presenter完成;
  2. MVP 模式就是将 P 定义成一个接口,然后在每个触发的事件中调用接口的方法来处理,也就是将逻辑放进了 P 中,需要执行某些操作的时候调用 P 的方法就行了。

2.4 MVP的优缺点

优点:

  1. 降低耦合度,实现了 Model 和 View 真正的完全分离,可以修改 View 而不影响 Modle;
  2. 模块职责划分明显,层次清晰;
  3. 隐藏数据;
  4. Presenter 可以复用,一个 Presenter 可以用于多个 View,而不需要更改 Presenter 的逻辑;
  5. 利于测试驱动开发,以前的Android开发是难以进行单元测试的;
  6. View 可以进行组件化,在MVP当中,View 不依赖 Model。

缺点:

  1. Presenter 中除了应用逻辑以外,还有大量的 View->Model,Model->View 的手动同步逻辑,造成 Presenter 比较笨重,维护起来会比较困难;
  2. 由于对视图的渲染放在了 Presenter 中,所以视图和 Presenter 的交互会过于频繁;
  3. 如果 Presenter 过多地渲染了视图,往往会使得它与特定的视图的联系过于紧密,一旦视图需要变更,那么Presenter也需要变更了。

3、MVVM (分手大师)

3.1 基础概念

MVVM 是 Model-View-ViewModel 的简写。它本质上就是 MVC 的改进版。MVVM 就是将其中的 View 的状态和行为抽象化,让我们将视图 UI 和业务逻辑分开

你可能感兴趣的:(2024年程序员学习,android,架构,mvc)