谈谈对MVC的理解

版权声明:本文系KevinAshen灵感之火花,转载请申明,一起前行! https://blog.csdn.net/KevinAshen/article/details/82763691

参考文章

CSDN

GitHub地址

MVC-NOMVC-difference

原理介绍

  1. 首先一切都来源于一张说明MVC模式的图片,只要你搜过MVC,基本上百分之八十的文章开头都是甩给你这张图片
  2. 接下来我们来理解MVC是啥
    • MVC实际上一种设计模式,MVC分别是Model,View,Controller
    • 在没有学习设计模式时,我们的程序基本上很简单,就是所有东西都塞在ViewController。这样子在编写比较大型的项目的时候应该也感受到了,你的Controller无比臃肿,所有代码都在里面,很难纠错。
    • Model是模型即对于数据的处理,包括了网络请求,数据加工
    • View是试图,UI啦,反正就是你在App上能看的到的东西都是View
    • Controller是控制器,这个其实也是刚开始我学习时的一个疑惑,为什么所有的UI等等之类的要算在Controller(原来其实这本来就是不好的习惯),控制器其实是作为Model与View的中介,把Model数据在View上显示出来
  3. 当然这个听起来非常easy,好像很有道理的样子,但其实这意味着在编程习惯上巨大的改变,举一个很简单的例子,如果现在我想创建一个UIButton,添加一个点击事件(比如打印一句话之类的)
    • 我们可以分成几个部分来看这件事,第一:初始化创建按钮,第二:写一个点击事件,第三:添加上去
    • 对于以前的习惯很简单,按部就班全部写在viewDidLoad里就行
    • 而换成现在MVC,你可能也觉得很简单,因为根据定义,只不过要把UIButton创建写在View层,在Controller里调用一下就好
    • 可是有一个问题,点击事件算什么?显然我们不能把它归类。
  4. 我们来看最开始给出的图,由于我们把一个页面上发生的事,分成了三份,所以很重要的一件事就是学习如何让这三个层能够互通有无
    • 对于Model来说,它无法与View层直接交互,必须通过Controller
    • 对于Controller来说,它是沟通Model与View的桥梁,通过Notification&KVO与Model交互
    • 对于View来说,它又要通过协议等来与controller交互
    • 因此想要学会MVC,通知,协议等是必不可少的

代码说明

  1. 这个GitHub地址包括了两个工程,分别是同样效果对于使用MVC与不使用MVC的写法,可以进行对比,程序本身非常简单,基本上一看就懂,就不做详细说明了
  2. 这里我使用了通知,如果对于通知不是很了解,可以看我这篇博客

最后说一句,这个MVC我现在看了很多文章,其实对于很多点很多人说的不太一样,所以这篇文章可能也有点问题,欢迎指出

猜你喜欢

转载自blog.csdn.net/KevinAshen/article/details/82763691
今日推荐