iOS项目架构之MVC、MVVM

2023-12-16  本文已影响0人  iOS_tree

MVC和MVVM模式是项目架构中最常使用的两种架构。
1、MVC
在iOS开发中,MVC中的M指的是承载数据的Model,V指的是现实数据的View,C指的是进行数据逻辑管理的ViewController。ViewController持有Model、View。数据Model传递给View的时候View也持有Model,但是View只会持有与自己相关的Model,ViewController一般作为View的delegate对象进行事件回调。
在进入一个新页面中,我们首先回创建ViewController对象,ViewController管理着自己的View,ViewController首先去获取数据Model,当获取到Model数据后持有数据Model对象,然后再把Model数据传递给自己持有的View对象进行显示,当用户点击View的某个控件时,事件通过代理或者通知等方式传递给ViewController进行处理,ViewController处理完毕后再调用View来进行做相应的修改显示。


MVC关系图

在这个过程中,数据的获取、排序、响应时间在ViewController对象中执行,Model只做数据承载,View只做数据显示与事件的回调。我们也会增加一些额外的类来进行 对应的数据处理,比如网络请求类、本地化数据保存类等功能类对象,Model也可能回进行一些基础性的数据处理逻辑,比如cell的模型可以把根据用户的出生年月计算用户年龄放在model里处理。
在MVC架构里,ViewController掌控全局,View只做显示使用,View依赖小,可复用性高,Model只做数据承载类和简单逻辑处理,依赖性小,而ViewController则为各种对象的处理中心,优点是逻辑比较清晰简单,分工明确,缺点是如果界面比较复杂则会代码会集中在ViewController,导致ViewController的功能代码过于庞大,如果代码注释不是很好,后期维护会比较复杂。
2、MVVM
MVVM中为M、V、ViewModel,M为Model,V为View和ViewController,VM为ViewModel。其中View和ViewController不直接持有Model,而是持有ViewModel,数据的获取和处理、事件的处理经过ViewModel进行。减轻ViewController的业务逻辑代码。
因为ViewController和View把逻辑代码分离出去,使得ViewController和View更专注于数据的显示,可复用性更高,不需要知道数据的来源,不需要处理相关网络请求。ViewModel专注于数据和事件的处理,可以更加容易进行数据方面的单元测试,不需要创建ViewController也可以进行数据测试。
由于ViewModel的加入,会使得代码量变得更多。
在小型简单的页面中使用MVVM会比MVC显的复杂。


MVVM简单关系图

3、MVC的扩展优化
在MVC模式中,ViewController中的代码会随着业务逻辑的增加而显得更为复杂,我们可以对ViewController里的功能代码进行分离来简化ViewController的代码臃肿程度,使得代码更容易维护。
我们在网络请求方面创建单独的NetWorkRequest类进行网络请求和数据处理,数据请求和数据的模型转换、数据的多页请求等。
我们在额外的功能上做分离处理,比如蓝牙功能则创建单独的蓝牙管理类来进行专门的蓝牙逻辑处理,ViewController直接调用蓝牙工具类来进行蓝牙方面的逻辑处理,蓝牙工具类不依赖于ViewController。
这样就可以简化ViewController的业务代码量,而减少维护的难度。
主要的目的就是做到类的功能专一,减少业务逻辑代码的耦合性,从而增加代码的复用性和可维护性。


MVC扩展

在开发中,我们可以根据项目特点和页面复杂程度选择不同的项目架构,选择最合适的架构才是最好的架构。我们目标是使代码逻辑更加清晰,更容易维护,更有利于后续人员的二次开发修改。

上一篇 下一篇

猜你喜欢

热点阅读