美文网首页Java 杂谈
mvc、mvp 和 mvvm小结

mvc、mvp 和 mvvm小结

作者: 吴小博Toby | 来源:发表于2019-02-15 11:14 被阅读1次

    by hzwusibo 20190215

    对 mvc、mvp 和 mvvm 知识点 回顾 

    一、MVC框架,在Android中:(缺点:随着界面及其逻辑的复杂度不断提升,Activity类的职责不断增加,以致变得庞大臃肿。)

    1、视图层(View): 一般采用XML文件进行界面的描述,这些XML可以理解为AndroidApp的View。使用的时候可以非常方便的引入。同时便于后期界面的修改。逻辑中与界面对应的id不变化则代码不用修改,大大增强了代码的可维护性。

    2、控制层(Controller):Android的控制层的重任通常落在了众多的Activity的肩上。这句话也就暗含了不要在Activity中写代码,要通过Activity交割Model业务逻辑层处理,这样做的另外一个原因是Android中的Actiivity的响应时间是5s,如果耗时的操作放在这里,程序就很容易被回收掉。

    3、模型层(Model):我们针对业务模型,建立的数据结构和相关的类,就可以理解为AndroidApp的Model,Model是与View无关,而与业务相关的(感谢@Xander的讲解)。对数据库的操作、对网络等的操作都应该在Model里面处理,当然对业务计算等操作也是必须放在的该层的。就是应用程序中二进制的数据。

    二、MVC → MVP两种模式的主要区别:

    1、View与Model并不直接交互,而是通过与Presenter交互来与Model间接交互。而在MVC中View可以与Model直接交互

    2、通常View与Presenter是一对一的,但复杂的View可能绑定多个Presenter来处理逻辑。而Controller是基于行为的,并且可以被多个View共享,Controller可以负责决定显示哪个View

    3、Presenter与View的交互是通过接口来进行的,更有利于添加单元测试。

    三、MVP优点:

    1、模型与视图完全分离,我们可以修改视图而不影响模型;

    2、可以更高效地使用模型,因为所有的交互都发生在一个地方——Presenter内部;

    3、我们可以将一个Presenter用于多个视图,而不需要改变Presenter的逻辑。这个特性非常的有用,因为视图的变化总是比模型的变化频繁;

    4、如果我们把逻辑放在Presenter中,那么我们就可以脱离用户接口来测试这些逻辑(单元测试)。

    四、MVVM:

    MVVM可以算是MVP的升级版,其中的VM是ViewModel的缩写,ViewModel可以理解成是View的数据模型和Presenter的合体,ViewModel和View之间的交互通过Data Binding完成,而Data Binding可以实现双向的交互,这就使得视图和控制层之间的耦合程度进一步降低,关注点分离更为彻底,同时减轻了Activity的压力。

    五、MVVM优点:

    1、View和Model双向绑定,一方的改变都会影响另一方,开发者不用再去手动修改UI的数据。额,互相自动的。

    2、不需要findViewById也不需要butterknife,不需要拿到具体的View去设置数据绑定监听器等等,这些都可以用DataBinding完成。

    3、View和Model的双向绑定是支持生命周期检测的,不会担心页面销毁了还有回调发生,由lifeCycle完成。

    4、不会像MVC一样导致Activity中代码量巨大,也不会像MVP一样出现大量的View和Presenter接口。项目结构更加低耦合。

    5、更低的耦合把各个模块分开开发,分开测试,可以分给不同的开发人员来完成。

    相关文章

      网友评论

        本文标题:mvc、mvp 和 mvvm小结

        本文链接:https://www.haomeiwen.com/subject/qyvxsqtx.html