转载标名出处 dubhtml
从这幅图能够看到,咱们能够看到在MVC里,View是能够直接访问Model的!从而,View里会包含Model信息,不可避免的还要包括一些业务逻辑。android
在MVC模型里,更关注的Model的不变,而同时有多个对Model的不一样显示,及View。程序员
因此,在MVC模型里,Model不依赖于View,可是View是依赖于Model的。不只如此,由于有一些业务逻辑在View里实现了,致使要更改View也是比较困难的,至少那些业务逻辑是没法重用的。数据库
Visual Studio等快速开发工具,让咱们很难把View和Controller分开,咱们老是直接在View的事件响应函数里完成了Controller的代码。而在ASP.NET和XAML里,使用了一种叫作Code-Behind的技术,能够把View和Controller进行分离。这样,View就能够彻底由UI设计工程师来完成,而Controller由程序员来完成,二者能够直接合成不须要像如今同样再由程序员作不少的工做。设计模式
把Controller和View混在一块儿,有什么问题?api
1.难以测试。服务器
必须手动点击,使用各类自动化的测试工具。app
2.代码难以重用。函数
UI是很难重用,由于要求老是不一样。因此,致使重复的代码四处都是,维护麻烦。工具
MVP
View :是指显示数据而且和用户交互的层。在安卓中,它们能够是一个Activity,一个Fragment,一个android.view.View或者是一个Dialog。
Model :是数据源层。好比数据库接口或者远程服务器的api。
Presenter:是从Model中获取数据并提供给View的层,Presenter还负责处理后台任务
MVP是一个将后台任务和activities/views/fragment分离的方法,让它们独立于绝大多数跟生命周期相关的事件。这样应用就会变得更简单,整个应用的稳定性提升10倍以上,代码也变得更短,可维护性加强,程序员也不会过劳死了~~
一个暴露接口,一个实现接口,流水式的设计,单向
在MVP里,Presenter彻底把Model和View进行了分离,主要的程序逻辑在 Presenter里实现。并且,Presenter与具体的View是没有直接关联的,而是经过定义好的接口进行交互,从而使得在变动View时候能够 保持Presenter的不变,即重用!
不只如此,咱们还能够编写测试用的View,模拟用户的各类操做,从而实现对Presenter的测试--而不须要使用自动化的测试工具。
咱们甚至能够在Model和View都没有完成时候,就能够经过编写Mock Object(即实现了Model和View的接口,但没有具体的内容的)来测试Presenter的逻辑。
在MVP里,应用程序的逻辑主要在Presenter来实现,其中的View是很薄的一层。 所以就有人提出了Presenter First的设计模式,就是根据User Story来首先设计和开发Presenter。在这个过程当中,View是很简单的,可以把信息显示清楚就能够了。在后面,根据须要再随便更改View, 而对Presenter没有任何的影响了。
若是要实现的UI比较复杂,并且相关的显示逻辑还跟Model有关系,就能够在View和 Presenter之间放置一个Adapter。由这个 Adapter来访问Model和View,避免二者之间的关联。而同时,由于Adapter实现了View的接口,从而能够保证与Presenter之 间接口的不变。这样就能够保证View和Presenter之间接口的简洁,又不失去UI的灵活性。
在MVP模式里,View只应该有简单的Set/Get的方法,用户用户输入和设置界面显示的内容,除此就不该该有更多的内容,毫不允许直接直接访问Model--这就是与MVC很大的不一样之处。
1. MVP 就是经过Presenter(主持)把View和Modle分开(最好用接口分开)
方便管理 example:
AppHolder appHolder = new AppHolder();
view.add(appHolder.views);//加载view
appHolder.bind(list);//加载数据
MVVM
他是真正和实现view 和model分离,修改model 不影响view
xml文件里根节点是<layout...
<data>
...
</data>
须要监听
绑定数据(按文档)