MVC-MVP-MVVM

作者: bridegg | 来源:发表于2017-12-14 15:33 被阅读0次

    前言

    小记市面上最流行的几种设计模式,本文只是个人一些观点,若有不对,请指出

    正文

    MVC

    MVC:Model View Controller,其中model是各种业务抽象的事物模型,view是给用户展示的界面,controller是控制view和model的控制器,关系大体如下


    image.png

    也就是说,View层会直接修改Model层,Model也可以改变View的展示,通过View也可以像Controller去获取数据,Controller也可以去选择View层的视图展示,Controller也可以获取数据后,修改Model层,首先将之前的数据和视图层分开,将开发时间成本和沟通成本降低,但是View层和Model层以及View层和Controller层的交互,由于没有彻底分离,会导致View层和Model层不容易分开对model层修改的权限在View上也有体现,会降低安全性。并且若严格按照MVC架构,一些小业务可能会使代码复杂化,运行流程的时间和空间成本提高。

    MVP

    MVP:Model View Persenter model和View同MVC一致,persenter主持者,顾名思义,他来主持Model层和View层的沟通 ,大体关系如下


    image.png

    其中Persenter中,主要提供一些某个业务或事物的所特有的属性或者方法,比如书本中的,增加一本书,或者获取书本列表等等,只需要通过view事件触发,Persenter发起执行命令,然后将数据输入至Model中。
    其实MVP是基于MVC基础上对MVC进行了优化,将model和view通过Persenter进行管理,有了统一的输入输出口,方便测试和优化。但是也因为统一了输入输出口,对一些特定的业务改变,可能会影响所有和此persenter相关的业务。

    MVVM
    MVVM:View Model ViewModel,view和model同上面一样,ViewModel其实有些类似persenter,但是又有不同,ViewModel是针对某个用户操作页面量身定制的model,他可能包含多个数据模型,其中关系同mvp一致 image.png

    但是包含关系不一样,我们用下图比较下MVP和MVVM的区别


    image.png image.png

    当然,这个不是真正的包含关系,但是大体可以用这两张图来区分MVP和MVVM,也就是说MVP几乎是一个Personter对应一个业务数据模型,而MVVM是一个ViewModel对应一个页面。

    结尾

    其实MVC和MVP以及MVVM各有优缺点,也不能说MVC一定不如MVVM或者MVP,对于android开发来说,使用MVP和MVVP当然会MVC的代码更好看些,可读性高些,但是对于Server开发,可能目前MVC还是会比MVP或MVVM灵活些。

    相关文章

      网友评论

        本文标题:MVC-MVP-MVVM

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