之前我们学习了那么多的设计模式,都是用来提高软件系统的“可复用性”和“可扩展性”的。今天我们来学习一下IOS开发中的应用的架构设计。
转载请注明出处:http://blog.csdn.net/developer_zhang
我们设计的系统架构应该采用分层划分方式,而且每层之间都应该是送耦合的,层次内部是高内聚的。如图为通用的低耦合的企业级系统架构图:
表示层:用户与系统交互的组件集合。用户通过这一层向系统提交请求或者发出指令,系统通过这一层接受用户指令,调用下一层,然后将结果展现到这一层。表示层应该是轻薄的,不应该具有业务逻辑。
业务逻辑层:系统的核心业务处理层。负责接收表示层的指令和数据,待指令和数据消化吸收后,再进行组织业务逻辑的处理,并返回结果给表示层。
数据持久层:数据持久层用于访问信息系统层,从设计规范上讲是为了降低耦合度,业务逻辑层不应该具有访问数据库或者文件操作的代码,这些代码应该放到数据持久层中。
信息系统层:系统的数据来源,可以使数据库,文件,遗留系统或者网络数据。
如果我们编写一个基于iOS(iPhone和iPad两个平台)的MyNotes应用,它具有增删改查备忘录的功能。用例图如下:
分层设计后,表示层可以分为iPhone和iPad版本,而业务逻辑层,数据持久层和信息系统层可以公用,这样大大减少了我们的工作量。
在IOS平台中,分层架构设计有多种模式:基于同一工程的分层,基于一个工作空间不同工程的分层和静态链接库分层。这里我们简单介绍基于统一工程的分层。
在本应用中,我们分为三组--PresentationLayer,BusinessLogicLayer和PersistenceLayer,其中PresentationLayer用于放置标识相关的类,BusinessLogicLayer用于放置逻辑层相关类,PersistenceLayer用于放置持久层相关的类。在各个层下面,我们可以按照业务模块划分,也可以按照组件功能划分。而PersistenceLayer层还要分为dao和domain两个组。dao用于放置数据访问对象,该对象中访问数据的CRUD四个类方法。为了降低耦合度,dao一般要设计成协议(或Java接口),然后根据不同的数据来源采用不同的实现方式。domain组是实体类,实体是应用中的”人“,”事“,”物“等。
代码实例:
Note实体类:
#import <Foundation/Foundation.h> /*! * Note实体类 * * @since V1.0 */ @interface Note : NSObject @property (nonatomic,strong) NSDate* date; @property (nonatomic,strong) NSString* content; @end
数据持久化操作类:
#import <Foundation/Foundation.h> #import "Note.h" /*! * 数据持久化操作类(用listData来模拟sqlLite) * * @since V1.0 */ @interface NoteDAO : NSObject //保存数据列表 @property (nonatomic,strong) NSMutableArray* listData; //单例方式实例化自身对象 +(NoteDAO*) shareInstance; //增加备忘录方法 -(int) add:(Note*)model; //删除备忘录方法 -(int) remove:(Note*)model; //修改备忘录方法 -(int) update:(Note*)model; //查询所有 -(NSMutableArray*) findAll; //根据主键查询数据的方法 -(Note*) findById:(Note*)model; @end
备忘录业务逻辑类:
#import <Foundation/Foundation.h> #import "NoteDAO.h" /*! * 备忘录业务逻辑类 * * @since V1.0 */ @interface NoteBL : NSObject //插入备忘录方法 -(NSMutableArray*) addNote:(Note*)model; //删除备忘录的方法 -(NSMutableArray*) removeNote:(Note*)model; //查询所有方法 -(NSMutableArray*) findAll; @end
以上是所有内容,希望对大家有所帮助。
代码实例:http://download.csdn.net/detail/u010013695/6968053
设计模式深入学习IOS版(8)架构设计,布布扣,bubuko.com
原文:http://blog.csdn.net/developer_zhang/article/details/20033159