最近项目要重构,首当其冲的就是代码结构,因为很多原因之前很少考虑代码结构的事情。终于要抽出一部分时间来重构这个项目,首先是整个项目的结构和代码逻辑不太符合MVC,又顺便了解了一下iOS里的MVC模式的概念。首先MVC模式不光定义了每一部分在整个应用中扮演的角色,也定义了各个部分相互沟通交流的方式。每一部分都扮演着不同的角色,分工明确,降低耦合,减少依赖,使得每一部分都能够复用,这也是MVC模式的意义和目的所在。下面就简单描述一下MVC模式里对每一个角色的职能和责任。
Model层对象应该是封装了一定的数据规范,并且定义了管理和处理这些数据的逻辑和计算。简单说就是Model对象不仅定义了数据结构,还要包括对数据结构的操作和处理逻辑。比如从网络、sqlite、UserDefault里获取需要在View里展现的数据以及存入用户感兴趣的数据等等。其实Model里是包含业务逻辑的,这一点和Web开发差异很大,之前在用Java开发Web程序时使用MVC,M就是POJO,只包括定义数据结构,不包含对这些数据的处理(处理的部分放在一个叫Service层里),也称之为贫血模型。相对应的充血模型就类似这里的M,是包含对数据的操作和处理,ROR里的ActiveRecord就是这样的。
View层的理解就很简单了,就是用户能看得见的东西,比如UIKit里的各种系统自带控件等。View对象应该知道如何把自己展示给用户并且对用户的操作做出回应。View层对象的主要用途在于展示出应用的Model层数据并且允许用户通过交互修改这些数据。
Controller层对象相当于一个中间人,负责协调应用中的View层对象和Model层对象的关系,也是View和Model相互沟通的媒介。除此之外,Controller还负责组织和协调应用中的任务以及管理其他对象的声明周期。
Model层不直接和View沟通,当Model层对象改变(比如通过网络获取到了新的数据),它会通知Controller对象,Controller对象收到通知更新对应的View。当View层有改变(比如用户通过交互创建或修改了数据,称为User Action),View会通过Controller对象去创建或修改Model层的数据。 Model层和View层是相互不知道对方的,它们的沟通是通过Controller这个中间人来协调处理。