MVC
视图层(View) 对应于xml布局文件和java代码动态view部分
控制层(Controller) MVC中Android的控制层是由Activity来承担的,Activity本来主要是作为初始化页面,展示数据的操作,但是因为XML视图功能太弱,所以Activity既要负责视图的显示又要加入控制逻辑,承担的功能过多。
模型层(Model) 针对业务模型,建立的数据结构和相关的类,它主要负责网络请求,数据库处理,I/O的操作。
MVC优点:
耦合性低——视图层和业务层分离,这样就允许更改视图层代码而不用重新编译模型和控制器代码
重用性高——多个视图能共享一个模型
生命周期成本低—— MVC使开发和维护用户接口的技术含量降低。
MVC缺点:
xml作为view层,控制能力实在太弱了,你想去动态的改变一个页面的背景,或者动态的隐藏/显示一个按钮,这些都没办法在xml中做,只能把代码写在activity中,造成了activity既是controller层,又是view层的这样一个窘境。大家回想一下自己写的代码,如果是一个逻辑很复杂的页面,activity或者fragment是不是动辄上千行呢?这样不仅写起来麻烦,维护起来更是噩梦。
view层和model层是相互可知的,这意味着两层之间存在耦合,耦合对于一个大型程序来说是非常致命的,因为这表示开发,测试,维护都需要花大量的精力。
MVP
Model:业务逻辑和实体模型,用来操作实际的数据,包含 Bean 和 Model 的抽象接口 来降低耦合。
View:就是 Android 中的视图,需要建立一个 View 的抽象接口 View Interface。通过实现 View 的接口来实现 View 与 Presenter 的交互,从而降低耦合。对应于Activity, 负责 View 的绘制与用户交互;
Presenter:View 和 Model 的中间枢纽,处理和用户交互的逻辑。
Activity/Fragment 只充当视图层,不做任何的业务逻辑,将业务逻辑全部放在业务层,由 Presenter 和 Model 进行交互,避免 Model 直接操作 View。以达到解耦的效果。
MVP 的优点:
将业务从 Activity/Fragment 分离,便于后期维护和测试。Mvp降低了耦合性,Presenter作为视图层交互的一个桥梁,不会轻易的让数据层和视图层进行交互。
MVP 使用特点是面向接口编程(View/Presenter/Model 都定义一套接口)
MVP缺点:
接口过于频繁,维护不方便。 由于对视图的渲染放在了Presenter中,所以视图和Presenter的交互会过于频繁。如果Presenter过多地渲染了视图,往往会使得它与特定的视图的联系过于密。一旦视图需要变更,那么Presenter也需要变更了。
MVC,MVP最大的区别就是MVC的model和view层是可以直接进行交互的,MVP的model数据层和view视图层之间的交互是通过presenter完成的。Mvp之所以比MVC解耦性更低,只要是把Presenter作为视图层交互的一个桥梁,不会轻易的让数据层和视图层进行交互。
网友评论