一、概述
架构模式的目的是为企业赋能,提高需求响应速度、系统稳定等,进而提高产研的工作效率。
二、常见的架构模式
1、MVC(Model-View-Controller)
简单理解,Controller
拥有View
和Model
对象,两者通过Controller
进⾏行行沟通,View
和Model
可以进行通信。
Controller
控制器层,负责业务逻辑、页面跳转、网络请求、数据库操作等。
View
显示层,负责页面的创建布局 和 用户交互响应逻辑。
Model
数据层,数据属性字段 和 数据转化等简单处理。

由上各个层的职责可知,Controller
负责的逻辑太多了,在加上实际开发中,会把很多页面和数据逻辑都放在Controller
中,就出现胖Controller
。也就是这个原因,MVC
也被称为 Massive View Controller(重量级视图控制器)
。
2、MVP(Model-View-Presenter)
简单理解,Model
提供数据,View
负责显示,Presenter
负责逻辑的处理。

-
MVP
与MVC
的区别在于:View
和Model
能否直接通信。
从上面定义中,发现将Presenter
-> Controller
,就是MVC
模式。
那么,它和MVC
模式有何不同呢?
MVP模式可以说对MVC模式进一步设计约束,即严格MVC模式。
在MVP
中View
并不直接使用Model
,它们之间的通信是通过Presenter
(MVC
中的Controller
)来进行的,所有的交互都发生在Presenter
内部,而在MVC
中View
会直接从Model
中读取数据而不是通过Controller
。

3、MVVM(Model - View - ViewModel)
简单理解,Model
和View
的职责基本同MVC
一致。
模式核心是引入ViewModel
层,主要职责是网络请求、数据转化、数据库处理等逻辑,同时双向绑定 Model
和View
,推荐 一个页面模块 对应 一个ViewModel。
例如,可以把UITableView的DataSource和Delegate放到ViewModel中。

-
注意:关于双向绑定可以通过block、delegate、notification、KVO等系统技术。或者使用RAC等响应式编程,不过其维护成本和Debug成本让人头大。目前业界也并没有什么好的MVVM框架开源出来。
-
注意:iOS的默认是
MVC
模式,因此必然会存在Controller
,网上很多将View
和Controller
合并划入MVVM
的View
层。
image.png
MVVM的进一步演化
个人推荐:Controller
不应该当做MVVM
的View
层,应该进一步的剥离,实现 数据驱动
模式架构。
而是居中角色,负责ViewModel
生命周期、ViewModel
间通信、页面跳转等,也可以把这些逻辑进一步的剥离到另外一层,可以叫做LogicLayer
中,进一步的解耦。
注意:解耦越彻底,代码量越是增加,因此架构讲究的是动态平衡。
4、VIPER(View - Interactor - Presenter - Entities - Router)
简单理解,VIPER
分为五个层次,如下
View
负责页面搭建和布局。
Interactor
负责数据实体、网络、数据库等相关业务逻辑,可以理解为业务交互器。
Presenter
负责包括 UI相关的业务逻辑,如页面事件响应,动画等。
Entities
数据实体,相当于Model
。
Router
负责 VIPER
模块之间的转场。

注意:VIPER
架构是可以用于整个App的整体架构的,不仅仅是MVC等模式应用场景。
VIPER
划分的太过于细致,解耦程度最高,可以做到测试驱动
开发模型;但也有代码太多,太多过于繁琐,因此在移动端页面端架构中不大好推广,但是在整个App的架构设计上,很多也是值得借鉴的。
Architecting iOS Apps with VIPER
三、最后
架构从哪里入手呢?思考整理中,下一篇文章进行分享~
网友评论