iOS分层架构设计-介绍篇

一、前言

iOS的应用也需要架构设计吗?答案是肯定的,但是并不一定采用分层架构设计。一般情况下,有关信息处理的应用采用分层架构设计,而游戏等应用不会采用分层架构设计。

Tips:游戏开发一般都会采用某个引擎,游戏引擎事实上包含里架构设计解决方案,游戏引擎的架构一般不是分层的而是树形结构的。

  • 表示层:它由UIKit Framework构成,包括视图、控制器、控件和事件处理等。
  • 业务逻辑层:框架的选取是根据业务而定,但一般是具有一定业务处理功能的编程语言封装的类或函数。
  • 数据持有层:提供本地和网络数据访问,它可能是访问SQLite数据的API函数,也可能是Core Data技术,或是访问文件的NSFileManager,或是网络通信技术。
  • 信息系统层:它的信息来源分为本地和网络。本地数据可以放入文件中,也可以放入数据库中,目前iOS本地数据库采用SQLite3。网络可以是某个云服务,也可以是一般的Web服务。
图1:分层架构设计图

二、工程与工作空间

Xcode不仅可以创建工程(Project),还可以创建工作空间(Workspace)。出于方便管理等目的,我们可以将多个相互管理的工程放到一个工作空间中,工作空间是多个工程的集合。工程文件名的后缀是.xcodeproj,工作空间文件名的后缀是.xcworkspace。

三、静态链接库

有时候,我们需要将某一层复用给其他团队、公司或个人,但由于某些原因,我们不能提供源代码,此时就可以将业务逻辑层和数据持有层编写成静态链接库(static library 或 static-linked library)或框架(Framework)。
库是一些没有main函数的程序代码的集合。除了静态链接库,还有动态链接库。它们的区别是:静态链接库可以编译到你的执行代码中,应用程序可以在没有静态链接库的环境下运行;动态链接库不能编译到你的执行代码中,应用程序必须在有链接库文件的环境下运行。
在Xcode中可以创建静态链接库工程,具体过程如下:
File -> New -> Project - > ...
Framework & Library -> Cocoa Touch Static Library工程模板。如下图:

图2:创建静态链接库工程

Tips:静态链接库中不能有Swift代码模块,只能是Objective-C代码模块。

四、框架

由于静态链接库比较麻烦,需要给开发者提供.a和.h文件,使用的时候还要配置很多的环境变量。事实上,苹果提供的API(如UIKit、QuartzCoreFoundation)都是框架。为了方便使用,框架会将.a或.h等文件打包在一起。
在Xcode中可以创建框架,具体过程如下:
File -> New -> Project - > ...
Framework & Library -> Cocoa Touch Framework

Tips:自定义框架没有静态链接库的限制,Swift代码可以在框架工程中使用。

五、10种分层模式

由于iOS 8 之后可以使用Swift和Objective-C两种语言,开发人员都有四种方式来选择开发语言。

  • 采用纯Swift的改革派方式
  • 采用纯Objective-C的保守派方式
  • 采用Swift调用Objective-C的左倾改良派
  • 采用Objective-C调用Swift的右倾改良派

从技术上讲,无论是否采用分层架构设计,都可以用上述4种方式来选择语言。也就是说,可以在同一层中采用单一语言和搭配混合,也可以在不同层之间采用单一语言和搭配混合。基于图1进行分层,如果只考虑业务逻辑层和数据持有层采用相同语言的情况下,那么可以混合搭配出4种模式,具体如下图:

图3:4种混合搭配

另外,如果考虑到代码的组织形式,可以分为如下3种:

  • 同一工程的分层,用P(Project)表示
  • 基于静态链接库实现的同一个工作空间不同工程的分层,用WL(Workspace Library)表示
  • 基于自定义框架实现的同一个工作空间不同工程的分层,用WF(Workspace Framework)表示

组合后得出如下图10种分层模式

图4:10种分层模式

由于框架实现要先进于静态链接库实现,所以WFOOO、WFSSS、WFSOO和WFOSS是我们优先考虑的,如果从技术和设计上无法实现,可以考虑WLOOO和WLSOO,最后是POOO、PSSS、PSOO和POSS实现。

六、写在最后

本期主要以介绍为主,下一期将更新实战篇,会以具体的项目为主体,详细解析如何使用分层架构。

你可能感兴趣的:(iOS分层架构设计-介绍篇)