关于MVC架构的理解
今天是开工第一天,首先呢,先祝广大的简友新春快乐!这也是公司版本迭代的空闲期间,没事的时候可以看(chui)看(chui)简(niu)书(b).
下面就来说下项目架构的理解,以下都是自己的理解,还请各路大神高抬贵手,毕竟和气生财,新年开工第一天,请让我以后写简书更有激情.
在iOS开发中,多数的项目都是传统的MVC模式,在我看来不管是什么结构的项目,都是由MVC衍生而来的.比如MVVM,MVP,和组件化开发,本文我们主要还是说下关于MVC吧!毕竟现在我们的项目还是MVC结构的,只是对于整体结构进行了进一步的修改,修改后的结构有点类似于MVP.下面废话少说,直接看图
screen_shot_01@2x.png
在这个架构中,我把每一个模块都会建立一个ViewController,Controller,Model,Network.
ViewController : 继承于UIViewController就是我们MVC架构中的C,但是在这里虽然它继承与UIViewController,但是我们把它看做是一个视图类,相当于View.
Controller: 是控制层,继承于NSObject.是一个单利类.把controller看做是控制器,所有的逻辑层,网络请求和跳转页面都放到这里.
Model: model还是那个model,大家熟悉的model.(但是c已经不是那个c了)
Network: 会英文的童鞋都应该知道,这肯定是网络请求,把每个模块的网络请求都单独写到这里面.
这时候有的童鞋就会问,刚刚那个controller里面不就有网络请求吗,为什么又会多出来一个network呢?!
这个network的作用就是把所有的网络请求的参数都用一个方法传到这个类里面,然后在controller里面调用这个network类中的方法,在controller里面就能够获取到网络层返回的数据了.如图:
screen_shot_02@2x.png
screen_shot_03@2x.png
这就可以说明为什么把网络请求再次区分一个类了吧!
controller是控制层,里面除了有网络请求,数据处理还会有关于跳转到某个页面的方法,如上图 screen_shot_03@2x.png.
这么做的主要原因就是:由于现在的项目的逻辑,需要跳转到同一个控制器的地方比较多,在传统的MVC架构中,每当我们从不同的控制器跳转到同一个控制器的时候,都会写一些重复的代码,但是如果我们一旦进行修改的时候我们就会发现,需要修改的地方太多了,代码的复用性特别低.如果我们采取这个方法,当我们在A,C,D不同的控制器中跳转到B控制器的时候,我们只需要调用B所在的Module的Controller中的push到B的方法即可,这样我们便提高了代码的复用性和可维护性.
大家觉得相比于MVC,这种对MVC的优化怎么样呢?
其实看完之后,我觉得大家的第一个反应就是,单利啊!单利会始终存在于app的生命周期中啊!会造成内存消耗啊!为什么不把每个Controller都当成每个控制器的一个变量呢?
个人觉得如果单利中没有过多的成员变量等,那么就不会造成太大的内存消耗.所以大家可以放心大胆的试试.
最后附上demo地址: https://github.com/Chris-Gaptain/CCStructDemo
好了,就到这里吧!喜欢的童鞋就赞下吧!不喜欢的童鞋只需要您的微微一笑!
希望大家能对我自己的理解给出宝贵意见(勿喷)