Android架构模式:MVC、MVP、MVVM,及其实现方式
更新:2023-05-14 07:29 在Android开发中,选择合适的架构模式对于项目的开发和后期维护都是至关重要的。Android中常用的架构模式包括MVC、MVP和MVVM。本文将深入探讨这三种架构模式的原理、实现方式以及优缺点,帮助开发者在实际项目中选择合适的架构模式。
一、MVC模式
MVC模式(Model、View、Controller)是一种将应用程序分为三个主要部分的模式,分别为业务逻辑层(Model)、表示层(View)和控制层(Controller)。这三个部分各司其职,通过分离使得应用程序更加可维护、可扩展。 在MVC中,View是用户直接接触的部分,负责展示数据。Model是封装了应用程序需要处理的数据,Controller则负责接收View的事件以及对Model的操作。 MVC模式的优点在于分离了数据操作和数据展示,方便进行单独的测试和维护。缺点在于Controller承担了过多的职责,可能会导致代码量过大,难以维护。
二、MVP模式
MVP模式(Model-View-Presenter)是在MVC模式的基础上发展而来,相对于MVC将Controller转换为Presenter,增加了代码的复杂性。相对于MVC模式,MVP更加清晰,结构更加简单明了。 MVP中,View负责展示数据和接收用户操作,Presenter负责响应用户操作,并且从Model中获取数据来更新View。Model则是数据层,封装了应用程序需要处理的数据。Presenter是View和Model之间的协调者,而且它不包含任何和Android相关的东西,便于进行单元测试。 相对于MVC模式,MVP将业务逻辑和表示层完全分离,增加了代码的代码的可读性、可维护性和可测试性,将View和Model进行了完全的解耦。
三、MVVM模式
MVVM(Model-View-ViewModel)模式是WPF和Silverlight中采用的经典UI设计模式,它类似于MVP模式,Presenter被ViewModel所替换。 MVVM中,View负责展示数据和接收用户操作,ViewModel负责协调和管理View和Model之间的数据交互。Model则是数据层,封装了应用程序需要处理的数据。 MVVM相对于MVP增加了数据绑定和命令的特性,使得更新UI和响应用户操作变得更加方便。在MVVM中,ViewModel提供了绑定到View的属性和命令,使得ViewModel改变时会自动更新View,将UI和业务逻辑解耦,代码更加简洁。
四、实现方式
下面我们将通过代码实现三种架构模式的方式:
MVC实现方式:
public class Model {
private String mData;
public void setData(String data) {
this.mData = data;
}
public String getData() {
return mData;
}
}
public class View {
public void showData(String data) {
Log.d("MVC", data);
}
}
public class Controller {
private Model mModel;
private View mView;
public Controller(Model model, View view) {
this.mModel = model;
this.mView = view;
}
public void updateData(String data) {
mModel.setData(data);
mView.showData(mModel.getData());
}
}
MVP实现方式:
public class Model {
private String mData;
public void setData(String data) {
this.mData = data;
}
public String getData() {
return mData;
}
}
public interface Contract {
interface View {
void showData(String data);
}
interface Presenter {
void getData();
}
}
public class Presenter implements Contract.Presenter {
private Model mModel;
private Contract.View mView;
public Presenter(Model model, Contract.View view) {
this.mModel = model;
this.mView = view;
}
@Override
public void getData() {
mModel.setData("Hello MVP!");
mView.showData(mModel.getData());
}
}
public class View implements Contract.View {
private Presenter mPresenter;
public View() {
mPresenter = new Presenter(new Model(), this);
}
@Override
public void showData(String data) {
Log.d("MVP", data);
}
public void requestData() {
mPresenter.getData();
}
}
MVVM实现方式:
public class Model {
private String mData;
public void setData(String data) {
this.mData = data;
}
public String getData() {
return mData;
}
}
public abstract class ViewModel extends BaseObservable {
public abstract void getData();
}
public class View implements Observer {
private ViewModel mViewModel;
public View(ViewModel viewModel) {
this.mViewModel = viewModel;
mViewModel.addObserver(this);
}
public void showData(String data) {
Log.d("MVVM", data);
}
@Override
public void update(Observable o, Object arg) {
if (o == mViewModel) {
showData(((Model) arg).getData());
}
}
}
public class ViewModelImpl extends ViewModel {
private Model mModel;
public ViewModelImpl() {
this.mModel = new Model();
}
@Override
public void getData() {
mModel.setData("Hello MVVM!");
setChanged();
notifyObservers(mModel);
}
}
五、总结
本文对Android中常用的MVC、MVP和MVVM架构模式进行了详细阐述,并给出了对应的代码实现方式。三种架构模式各有优缺点,具体选择哪种模式需要根据实际项目情况而定,开发者需要根据自己的经验和项目需求进行选择。