美文网首页
浅谈MVC和MVVM

浅谈MVC和MVVM

作者: jinjiantong | 来源:发表于2020-11-03 17:28 被阅读0次

    MVC本很美好,但到了iOS下变得不那么美好了,为什么这么说呢?
    我眼里的MVC
    M :
    Model 首先他不是实体,他主要作用是来处理业务逻辑的,他负责网络请求,组织数据,逻辑处理后通过XXX方式通知给VC。
    V:
    View很显然他只负责拿数据显示
    C:
    ViewController 拿Model加工好的数据供View显示,当中间协调者的作用

    VC持有Model和View,因为是强依赖直接调用对象提供的方法
    反而Model和View对VC没有依赖所以对VC的通信过程相对比较艰难
    常用delegate,block,target-Action,protocol,KVO,通知等手段来通信

    看起来挺好的,实际上也挺好
    那为什么很多人说他不好呢,因为他们发现这种模式下VC变得很臃肿,
    为什么会臃肿?
    因为你没有严格执行MVC思想
    因为很少有人单独给View弄一个层提供VC持有
    为什么呢?
    问题关键点是iOS里VC天然持有View,苹果也鼓励我们直接当这个View容器来上面添加子View
    这就比较矛盾了,MVC让我们分3层,你们VC和View竟然在一起
    这么以来VC里写很多关于View的代码
    View的addsubview要写在VC里
    View的action和实现逻辑要写在VC里
    View的赋值也要写在VC里
    那错在谁?
    其实谁都没错,因为MVC其实提供的只是思想

    因为VC直接持有View,平时开发中我们很少创建单独View类来管理View逻辑
    所以VC的臃肿是避免不了(这里很多人以为VC臃肿是因为里面做了网络请求)
    这种背景下出现了MVVM

    MVVM
    M:
    Model 还是那个Model。
    VM:
    处理本应该VC处理的业务逻辑
    View/VC:负责显示

    再来跟MVC比较一下
    Model View VC
    Model ViewModel View/VC
    整理下他们的区别
    View和VC变一个后又多出了ViewModel
    抛开表面上的区别我们真正要关注的应该是MVVM里弱化了VC的存在,强化了ViewModel
    这是因为ViewModel抽离了VC的业务逻辑
    那么问题来了为什么这么做呢?
    仅仅是为了VC的瘦身?

    要知道软件设计里复用思想是无处不在,即便你现在用不上,我们应该长远的角度上考虑,万一以后要用到呢?
    MVC里我们无法复用VC,除非界面功能一模一样。但MVVM的ViewModel可以做到的
    所以说MVVM的出现是恰恰解决这个问题
    1.VC类天然持有View -》VC和View一起对待
    2.VC逻辑无法使用 -》 VC逻辑抽离到ViewModel 通过ViewModel复用,‘顺便’给VC瘦身

    当然随着时间推移对这些架构模式的理解也会有所不同,
    这只是个人理解

    继续
    在MVVM的架构上大家习惯把网络请求放在ViewModel里然后Model当作实体使用,
    个人理解的MVVM里这种操作是错误的,
    因为VM只是是VC的逻辑抽离,VC本身不应该是发送网络请求,所以按这个逻辑VM也不应该发送网络请求。
    可以简单的总结MVVM也是MVC,只是他的增强版本而已

    当然不管mvc还是mvvm,不管你在哪里发网络请求,架构是死的人的思想是活的,
    我们可以抛开架构的限制适当结合自己的业务做自己的发挥,当然这前提是要符合优秀的程序设计要求(面向对象的三大基本特征,五大基本原则)。

    相关文章

      网友评论

          本文标题:浅谈MVC和MVVM

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