没有合适的资源?快使用搜索试试~ 我知道了~
Android一些关于MVC,MVP,MVVM以及Rxjava,WMRouter,ARoute,Zxing等框架一些问题总结
需积分: 0 1 下载量 60 浏览量
2023-05-11
07:58:12
上传
评论
收藏 70KB DOCX 举报
温馨提示
试读
26页
Android一些关于MVC,MVP,MVVM以及Rxjava,WMRouter,ARoute,Zxing等框架一些问题总结。
资源推荐
资源详情
资源评论
MVC 是一种在软件开发中广泛使用的架构模式,Android 平台上也有多种实现。在 Android
中 MVC 的基本实现方式:
(1)View 层是通过布局、资源文件以及内置类如 Button 来实现。
(2)Controller 层则是通过 Activity 来实现的
(3)Model 层则由实现应用的逻辑的类来实现的。需要注意的是 Activity 并不应该包含应用
领域的逻辑
使用 MVC 的好处是可以是代码易于维护和重用。大多数 Android 开发者都采用 MVC 模式。
MVC 的实现方式在不同的应用可能会有所不同。但是它额基本结构包括 Model、View 和
Controller 三个部分,各个部分分别负责不同的任务。在 Android 中,model 层通常由实现业
务逻辑的实体或者类来实现,View 则由布局、资源文件以及 UI 组件如 EditText 等实现。
Controller 层则由 Activity 或者 fragment 等实现。
· Android 中使用了 Activity 来充当 Controller,但实际上一些 UI 也是由 Activity 来
控制的,比如进度条等。因此部分视图就会跟 Controller 捆绑在同一个类了。同时,由于
Activity 的职责过大,Activity 类的代码也会迅速膨胀。
· MVC 还有一个重要的缺陷就是 View 跟 Model 是有交互的,没有做到完全的分离,这就
会产生耦合。
虽然 MVC 很简单,但是如果项目比较小且无需频繁修改的话,就可以不用 MVC
了,避免过度设计,造成维护困难。
MVP:
MVP 全名是 Model-View-Presenter,是从经典的模式 MVC 演变而来的。其
中 Model 负责处理数据的加载或存储,View 负责界面数据的展示,与用户进行
交互,Presenter 负责逻辑业务的处理。View 接受用户的请求,然后将请求传递
给 Presenter。Presenter 进行业务逻辑处理,修改 Model。Presenter 通知 View
去更新界面显示。通常 View 与 Presenter 是一对一的,但复杂的 View 可以绑定
多个 Presenter 来处理逻辑。最主要的区别就是 MVP 中 View 与 Model 并不直
接交互,而在 MVC 中 View 可以与 Model 直接交互。UI 改变的话,比如 TextView
替换 EditText,可能导致 Presente 的一些更新 UI 的接口也跟着需要更改,存在
一定的耦合。
Model:模型层,负责处理数据的加载或存储。与 MVP 中的 M 一样。
View:视图层,负责界面数据的展示,与用户进行交互。与 MVP 中的 V 一样。
Presenter:负责逻辑业务的处理。跟 MVC 中的 C 有所区别。
作用:将 model 与 View 彻底分离
解决 MVC 中 Activity 职责过多,代码臃肿的问题
1. View 接受用户的请求,然后将请求传递给 Presenter。
2.Presenter 进行业务逻辑处理,修改 Model。
3.Presenter 通知 View 去更新界面显示。
MVP 里面的,Model 层与 MVC 的 model 不同,MVP 里的 Model 只会与 Presenter
交互,不会跟 View 交互。
public class NumModel {
private int num = 0;
public void add(ModelCallback callback) {
callback.onSuccess(++num);//通知 Presenter 结果
}
public interface ModelCallback {//数据回调接口
void onSuccess(int num);
void onFailed(String text);
}
}
在 View 层次,MVP 中的 Activity 也充当了 View,同时会支持 Presenter 的引用。
Iview 接口,暴露给 Presenter 的方法:
public interface IView {
void updateUI(String text);}
PresenterActivity 类
public class PresenterActivity extends Activity implements IView {//实现 IVi
ew 接口
private TextView mTextView;
private Button mButton;
private IPresent mPresent;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_controller);
mTextView = findViewById(R.id.tv_show);
mButton = findViewById(R.id.btn_add);
mPresent = new NumPresenter(this);//初始化一个 Present
mButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
mPresent.add();//交给 Present 去处理
}
});
}
@Override
public void updateUI(String text) {//实现 IView 接口里面的更新 UI 的方法
mTextView.setText(text);
}}
Activity_controller.xml 跟 MVC 的布局一样
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http:/
/schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<TextView
android:id="@+id/tv_show"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="0"/>
<Button
android:id="@+id/btn_add"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="点击+1"/></LinearLayout>
Presenter 层
负责业务逻辑处理
IPresent 接口,暴露给 View 调用
public interface IPresent {
void add();}
NumPresenter 类,具体代码逻辑:
public class NumPresenter implements NumModel.ModelCallback, IPresent {//实
现 ModelCallback,IPresent 等接口
private NumModel mNumModel;
private IView mView;
public NumPresenter(IView view) {
mView = view;//持有 IView 对象
mNumModel = new NumModel();//创建 NumModel 对象
}
public void add() {//IPresent 接口的方法,来自 View 层的调用
mNumModel.add(this);//相关逻辑处理,这里直接交给 Model 层
剩余25页未读,继续阅读
资源评论
脚踏实地,坚持不懈!
- 粉丝: 159
- 资源: 2
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功