浅析MVC和MVP
来源:互联网 发布:中文域名不流行 编辑:程序博客网 时间:2024/05/17 22:54
MVC
MVC全名是Model View Controller,是模型(model)-视图(view)-控制器(controller)的缩写。
- 模型(Model)主要做一些业务逻辑处理,比如数据库存取,网络操作,复杂算法,耗时任务。
- 视图(View)主要是用来显示Model的数据结果,Android主要是指XML布局。
- 控制器(Controller)处理用户交互部分,可以将Activity看做是控制器。通常控制器负责从视图读取数据,控制用户输入,并向模型发送数据。
这幅图表示了Controller从View读取数据后,传递给Model,Model将结果返回给View。Controller起到了中间桥梁的作用,控制View和Model两者之间的通信。
通过MVC模式,我们可以将界面层和和业务层分离开,让他们各司其职。
但是Activity中有很多关于视图UI的显示代码,因此View视图和Activity控制器并不是完全分离的,一部分的View存在于Controller中。
当项目不是很庞大时,使用MVC框架模式是比较理想的,能够方便我们维护。但是当App逐渐变大,就应该使用MVP了。
MVP
MVP是模型(Model),视图(View),控制者(Presenter)的缩写。
- 模型(Model):数据层,他负责对数据的存取。例如数据库的读写,网络数据的请求。
- 视图(View):负责界面数据的显示以及用户的交互。通常为Activity或者Fragment作为View层。
- 控制者(Presenter):将模型与视图分离开,是模型和视图之间的桥梁。
从图中我们可以看出,MVP架构中,Model无法与View直接交互,Presenter会从Model获取所需要的数据,进行适当处理后交给View层显示。这种方式View和Model不再耦合,同时业务逻辑也从图形界面中抽离出来了。
Presenter存在Model和View的接口,View中也会持有一个Presenter成员变量,并且保留Presenter接口的调用。
下面是一个简单的逻辑例子,并不是完整的代码,阐述的是Presenter从界面中获取了下载的网址,然后调用Model去下载,同时让View显示正在下载的对话框。
//Modelpublic interface IModel{ void load(String str);public class ModelImpl implements IModel{public void load(String str){//从网络中下载数据 ......}}}
//Presenterpublic interface IPresenter{ void getInfo(String str); }public class PresenterImpl implements IPresenter{ //IView的接口 IView view; //IModel的接口 IModel model; public PresenterImpl(IView view){ this.view = view;} public void getInfo(String str){ view.showLoading();//界面显示正在下载 model.load(str);//model从网络中下载数据}}
//IViewpublic interface IView{ void showLoading();}public calss MainActivity extends Activity implements IView{ IPresenter presenter;protected void onCreate(Bundle savedInstanceState){ super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); init();//初始化}public void init(){ btn = (Button)findViewById(R.id.btn); presenter = new PresenterImpl (this); btn.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { //获取网址 presenter.getInfo(editText.getText().toString()); } });} @Override public void showLoading() { loadingDialog.show(); //使用对话框显示正在下载的进度 } }
MVP框架模式将Model模型和View视图分离,从而使得代码的耦合度低,利用MVP框架写项目达到解耦作用。
MVC和MVP的最大的区别就是:
MVC中View和Controller的关系比较紧密。而MVP中两者完全分离。在Android中的MVP框架,Activity担当了View视图层,MVC框架中Activity担当控制器。
MVP可以达到很好的解耦作用,但是比较复杂,比较适合开发较大的项目。如果项目较小,建议使用MVC。
以上就是我对MVC和MVP的理解所做的笔记。
参考:
http://blog.csdn.net/gjnm820/article/details/51733361
http://blog.csdn.net/ljd2038/article/details/51477475
- 浅析MVC和MVP
- MVC、MVP、MVVM模式浅析
- MVC和MVP
- MVC和MVP
- MVP和MVC
- MVC和MVP
- MVC和MVP
- MVC和MVP
- 浅谈MVP和MVC
- MVC、MVP 和 MVVM
- MVC,MVP 和 MVVM
- MVC,MVP 和 MVVM
- MVC、MVP和MVVM
- MVC,MVP 和 MVVM
- MVC,MVP和MVVM
- MVP和MVC
- mvc 和mvp mvvm
- MVC和MVP
- [机器学习] 深度学习之caffe1——软件配置与测试
- 【响应式Web设计】读书笔记
- 享元模式(Flyweight)
- 判断元素是否进入二级菜单,使用setInterval()与setTimeout()时出现的问题
- 在相册查看保存的图片
- 浅析MVC和MVP
- 运算符优先级
- android 倒计时 实现,很简单方便的一种方法,不用考虑资源释放
- oralce 报错 ora-16032 parameter log_archive_dest_1 destination string cannot be transtlated
- 51 Nod1099贪心
- RAC 双向绑定实现案例
- selenium server运行时候报错---“端口被占用”,Windows平台如何查看端口占用情况
- Java永久代去哪儿了
- 最长公共子序列