iOS

来源:互联网 发布:002517恺英网络股票 编辑:程序博客网 时间:2024/06/05 18:52

架构设计的目的是管理开发的复杂性,合理的拆分项目中的逻辑,更加方便工程的维护和管理,来节约开发时间、提高开发效率。

目前在实际开发过程中比较常见的集中架构主要包括,MVC、MVVM、VIPER(View Interactor Presenter Entity Router),这几种架构的设计思路基本上是一致的,后面几种都是基于MVC,将Controller中的逻辑拆分出来,只是程度和方式有所不同。

首先,简单介绍一下MVC,这是苹果官方所推荐的一种设计方式,主要包括Model、View、Controller:

Model:封装的数据模型,用来保存数据;View:视图控件,用来展示视图;Controller:主要是视图控制器,用来处理用户事件,更新视图和数据等逻辑;

MVC架构层级关系图

其设计思想是减少View 和 Mode的耦合行,View只包含视图,Model只涉及数据,Contrller用于控制两者之间的逻辑关系,View和Model之间不需要有直接的联系。不过,这种设计模式随着项目的复杂度逐渐提升,暴露出来Controller代码臃肿,管理不便,维护成本升高等问题。

为了减轻Controller的负担,将整合View展示数据的逻辑抽分出来封装成为ViewModel,于是有了MVVM设计方式,它主要包括三个部分:

Model:此处的Model与MVC中的Model相同,是封装的数据模型;View:此处的View是指的的View和ViewController,用于展示视图和接收用户事件等;ViewModel:视图模型有直接用于展示的接口和数据输入接口,其主要作用是,将初始数据处理成为直接用于视图展示的Model;

MVVM中,采用了双向绑定(Data and user action binding)来同步View和ViewModel的状态,View的变动,自动反映在所绑定的 ViewModel,反之亦然。其设计思想是在MVP的基础上,从Controller中抽取出负责展示视图的数据处理逻辑,形成ViewModel。

MVVM三个元素的逻辑关系是:

MVVM结构层级关系图

1、Model数据提供给ViewModel,经过ViewModel处理转换成为View可以直接展示的数据,然后更新ViewMode的状态;
2、View层接收到用户事件或者状态改变事件,该View所绑定的ViewModel也可以同步更新,然后ViewModel会更新对应的本地Model数据。

MVVM的优点有:
1、低耦合性,降低视图逻辑处理与其他业务逻辑的耦合性;
2、可复用性,一个通用的视图逻辑封装到一个ViewModel中,可以有很多View重用这段视图逻辑;
3、方便视图单元测试,由于视图逻辑被拆分出来,在测试对应的视图或者样式的时候,只需要更改ViewModel中的视图逻辑即可,与其他业务逻辑无关;

随着项目系统复杂度提升,有更细致的需求需要抽象出来,单独处理以方便维护,又把Controller中的用户交互逻辑、路由器职责划分出来由协调器(Presenter)调度,于是就有了VIPER(View Interactor Presenter Entity Router)架构。

VIPER架构设计中主要分为五个部分:

1、View:指View与ViewController,包含UI层面的业务逻辑以及交互层面的接口调用和转发; 2、Interacter:交互器,包括用户交互动作和关于数据和网络请求的业务逻辑,例如创建一个实体(数据),或者从服务器中获取一些数据。3、Presenter:统一调用各个部分之间的协议接口,例如将Interacter中请求来的数据传递给View层,将用户交互事件传递给路由层等;4、Entity:实体模型,普通的数据对象;5、Router:用于各个页面层次之间的联系绑定,页面视图跳转链接等;

VIPER架构层级关系图

其主要设计思路还是从MVC中的Controller抽取业务楼逻辑。

VIPER架构是从中抽象出了View、Interactor、Router等逻辑。使用时,首先将不同的逻辑抽象封装为对应的协议,然后在视图控制器中通过协议,将不同逻辑处理交给遵守所有协议并且绑定其对应关系的Presenter对象去统一处理。其中Router逻辑已经有不少开源库进行了封装,调用起来也比较方便,比如 JLRoutes、HHRouter、MGJRouter等.

原创粉丝点击