iOS移动平台架构设计说明
更新时间:2023-04-06 06:34:01 阅读量: 教育文库 文档下载
- ios开发架构设计推荐度:
- 相关推荐
. . . .
低耦合企业级系统架构设计
我们往往称JavaEE或.Net 开发的产品为“系统”,而移动平台(主要是:Android、iOS和Window Phone)开发的产品为“应用”。“系统”比较复杂,需要架构设计,而“应用”相对比较简单,这是不是意味着我们不需要考虑架构问题呢?
我们首先了解一下企业级系统架构设计。软件设计的原则是提高软件系统的“可复用性”和“可扩展性”,系统架构设计采用层次划分方式,这些层次之间是松耦合的,层次的部是高聚的。降低耦合是软件设计的目标,能够设计出低耦合的系统,就意味着我们的系统具有“可复用性”和“可扩展性”。通用低耦合 JavaEE和.Net企业级系统架构图。
表示层是用户与系统交互的组件集合,用户通过这一层向系统提交请求或发出指令,系统通过这一层接收用户请求或指令,然后,将指令消化吸收后调用下一层,再将调用的结果展现到这一层。表示层应该是轻薄的不应该具有业务逻辑。
业务层是系统的核心业务处理层,负责接收表示层的指令和数据,消化吸收后,进行组织业务逻辑的处理,并将结果返回给表示层。
数据持久层是服务层用于访问数据库层,从设计规上讲为了降低耦合度,服务层不应该具有访问数据库的代码,访问数据库的代码应该放到数据持久层中。
信息系统层,是系统的数据来源,可以是数据库、文件、遗留系统和网络数据。
移动平台的分层架构设计
. . . .
. . . .
移动平台的应用是缩小版本的系统,它也需要架构设计,但并非所有的应用都一定基于通用低耦合企业级系统架构,一般而言主要是涉及信息处理的应用才使用这种架构设计模式,例如:一些游戏有自己的游戏引擎,引擎也属于架构设计。iOS平台一般信息处理应用分层架构设计图。
表示层,iOS中的表示层是由UIKit Framework构成的,它包括我们前面学习的视图、控制器、控件和事件处理等容;
业务逻辑层,采用什么框架要据具体的业务而定,但一般是具有一定业务处理功能的Objective-C和C++封装的类,或者是C封装的函数。中国返利网www.chinafanli. 艺尚网www.artzhu.
数据持久层,提供本地或网络数据访问,它可能是访问SQLite数据API函数,也可能是CoreData技术,或是访问文件的NSFileManager,或是网络通信等技术,采用什么方式要看信息系统层是什么。
信息系统层,就iOS而言它的信息来源分为:本地和网络。本地数据可以放入文件中也可以放在数据库中,目前iOS 本地数据库采用SQLite3。网络可以是某个云服务,也可以是一般的Web服务。
基于同一工程的分层
架构对于我们iPhone和iPad开发有着很现实的意义。如果我们要编写一个基于iOS(iPhone和iPad两个平台)“My 备忘录”应用,它具有:增加、删除和查询备忘录的基本功能,“备忘录”应用用例图,分层设计之后,表示层可以有不同iPhone版和iPad版本,而且业务逻辑层、数据持久层和信息系统层都可以公用。这样可以大大减少我们的工作量,这就是分层设计的好处。
. . . .
. . . .
iOS考虑iPhone和iPad两个平台,我们绘制了设计原型草图,iPhone版本的“My备忘录”应用设计原型草图。iPad 版本的“My备忘录”横屏设计原型草图,iPad版本的“My备忘录”竖屏设计原型草图。
. . . .
. . . .
. . . .
. . . .
在iOS平台分层的具体做法有多种模式:基于同一工程的分层、基于一个工作空间不同工程的分层和静态库分层。本小节介绍基于同一工程的分层。
我们在前文中已经介绍了构建自适应iPhone和iPad工程,就是我们现在要讲的基于同一工程的分层模式。请读“备忘录”应用的代码,实现过程这里不做介绍,打开“MyNotes”工程,在Xcode工程导航面板有3个组:PresentationLayer、 BusinessLogicLayer和PersistenceLayer。创建这3个组的目的是把不同层中类放到对应的组中便于管理,PresentationLayer是放置的表示层相关类,BusinessLogicLayer是放置的业务逻辑层的相关类,PersistenceLayer是放置持久层相关类。
各个层的下面再如何划分呢?我们可以按照业务模块划分,也可以按照组件功能划分。本应用中PersistenceLayer层就还要分成dao和 domain两个组,dao是放置数据访问对象的,该对象中有对数据访问的CRUD四类方法,为了降低耦合度dao一般要设计成为协议(或Java接口),然后根据不同的数据来源采用不同的实现方式。domain组是实体类,实体是应用中的“人”、“事”、“物”等。
dao组中NoteDAO.h代码如下:
interface NoteDAO : NSObject
//保存数据列表
property (nonatomic,strong) NSMutableArray* listData;
+ (NoteDAO*)sharedManager;
. . . .
. . . .
//插入Note方法
-(int) create:(Note*)model;
//删除Note方法
-(int) remove:(Note*)model;
//修改Note方法
-(int) modify:(Note*)model;
//查询所有数据方法
-(NSMutableArray*) findAll;
//按照主键查询数据方法
-(Note*) findById:(Note*)model;
end
listData属性用于保存数据表中的数据,其中每一个元素都是Note对象,一个Note对象代表数据表中的一条数据。+ (NoteDAO*)sharedManager方法用于获得NoteDAO单例对象。dao组中NoteDAO.m代码如下:
implementation NoteDAO
中国返利网www.chinafanli. 艺尚网www.artzhu.
static NoteDAO *sharedManager = nil;
+ (NoteDAO*)sharedManager
{
static dispatch_once_t once;
dispatch_once(&once, ^{
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateFormat:"yyyy-MM-dd HH:mm:ss"];
NSDate *date1 = [dateFormatter dateFromString:"2010-08-04 16:01:03"];
Note* note1 = [[Note alloc] init];
note1.date = date1;
. . . .
. . . .
note1.content = ”Welcome to MyNote.”;
NSDate *date2 = [dateFormatter dateFromString:"2011-12-04 16:01:03"]; Note* note2 = [[Note alloc] init];
note2.date = date2;
note2.content = ”欢迎使用MyNote。”;
sharedManager = [[self alloc] init];
sharedManager.listData = [[NSMutableArray alloc] init]; [sharedManager.listData addObject:note1];
[sharedManager.listData addObject:note2];
});
return sharedManager;
}
//插入Note方法
-(int) create:(Note*)model
{
[self.listData addObject:model];
return 0;
}
//删除Note方法
-(int) remove:(Note*)model
{
for (Note* note in self.listData) {
. . . .
. . . . //比较日期主键是否相等
if ([note.date isEqualToDate:model.date]){
[self.listData removeObject: note];
break;
}
}
return 0;
}
//修改Note方法
-(int) modify:(Note*)model
{
for (Note* note in self.listData) {
//比较日期主键是否相等
if ([note.date isEqualToDate:model.date]){
note.content = model.content;
break;
}
}
return 0;
}
//查询所有数据方法
-(NSMutableArray*) findAll
{
. . . .
. . . .
return self.listData;
}
//按照主键查询数据方法
-(Note*) findById:(Note*)model
{
for (Note* note in self.listData) {
//比较日期主键是否相等
if ([note.date isEqualToDate:model.date]){
return note;
}
}
return nil;
}
end
NoteDAO实现采用了单例设计模式,这种设计与DAO设计模式没有关系,这主要是出于访问数据的方便。数据放置在listData属性中(本应该是从数据库中的,但是数据库访问技术我们还没有学习),CRUD方法也都是对listData的处理,而非数据库。
domain组中Note代码如下,它只有两个属性date是创建备忘录的日期,content是备忘录容:
//
// Note.h
#import
interface Note : NSObject
property(nonatomic, strong) NSDate* date;
property(nonatomic, strong) NSString* content;
. . . .
. . . .
end
//
// Note.m
#import ”Note.h”
implementation Note
end
//
// Note.h
#import
interface Note : NSObject
property(nonatomic, strong) NSDate* date;
property(nonatomic, strong) NSString* content;
end
//
// Note.m
#import ”Note.h”
implementation Note
end
业务逻辑层BusinessLogicLayer中的类的设计一般是按照业务模块设计的,它的方法是业务处理方法,下面代码是NoteBL.h代码:
interface NoteBL : NSObject
//插入Note方法
-(NSMutableArray*) createNote:(Note*)model;
//删除Note方法
-(NSMutableArray*) remove:(Note*)model;
//查询所有数据方法
-(NSMutableArray*) findAll;
end
在NoteBL.h中定义了三个方法,之所以定义三个方法是根据我的业务需求决定的,业务需求可以参考的用例图。下面代码是NoteBL.m代码:
implementation NoteBL
//插入Note方法
-(NSMutableArray*) createNote:(Note*)model
{
NoteDAO *dao = [NoteDAO sharedManager];
[dao create:model];
return [dao findAll];
}
//删除Note方法
-(NSMutableArray*) remove:(Note*)model
. . . .
. . . . {
NoteDAO *dao = [NoteDAO sharedManager];
[dao remove:model];
return [dao findAll];
}
//查询所有数据方法
-(NSMutableArray*) findAll
{
NoteDAO *dao = [NoteDAO sharedManager];
return [dao findAll];
}
end
. . . .
正在阅读:
iOS移动平台架构设计说明04-06
研究生英语听说教程答案04-24
芭比娃娃的英文介绍05-29
施工资料组卷办法10-29
人教版第十章浮力单元 易错题学能测试07-24
财务分析问答题11-16
一级建造师课后练习题精选(E)04-20
爆破工岗位应急处置措施08-06
夏天的荷花池作文200字07-06
- exercise2
- 铅锌矿详查地质设计 - 图文
- 厨余垃圾、餐厨垃圾堆肥系统设计方案
- 陈明珠开题报告
- 化工原理精选例题
- 政府形象宣传册营销案例
- 小学一至三年级语文阅读专项练习题
- 2014.民诉 期末考试 复习题
- 巅峰智业 - 做好顶层设计对建设城市的重要意义
- (三起)冀教版三年级英语上册Unit4 Lesson24练习题及答案
- 2017年实心轮胎现状及发展趋势分析(目录)
- 基于GIS的农用地定级技术研究定稿
- 2017-2022年中国医疗保健市场调查与市场前景预测报告(目录) - 图文
- 作业
- OFDM技术仿真(MATLAB代码) - 图文
- Android工程师笔试题及答案
- 生命密码联合密码
- 空间地上权若干法律问题探究
- 江苏学业水平测试《机械基础》模拟试题
- 选课走班实施方案
- 架构
- 说明
- 移动
- 设计
- 平台
- iOS
- 北京体育大学运动训练学考研复习重点名词解释部分
- 中国互联网络发展状况分析报告
- 三甘醇脱水系统设计毕业论文
- 精选5篇广西王城导游词.doc
- 初中中考专题济南市 初中学业水平考试地理试题(有答案)
- how to be a good translator怎么样成为一名好的翻译
- 毕业论文外文翻译(中英文)
- International Archives of the Photogrammetry, Remote Sensing
- 故乡》《我的叔叔于勒》《孤独之旅》群文教学实录
- 人教版七年级上册数学《角的相关知识》能力提升专题过关分类练习
- 公司股权分配协议样本
- 无偿租赁协议合同新编范本
- 2022年秋高中生物 第二章 组成细胞的分子 课时提升作业 五 2.3
- 卡特CAT950E装载机的几种零件改装修复
- 北理工19年1月《社会调查研究方法》作业考核试题
- 人教八下英语Unit5Whatwereyoudoingwhentherainstormcame短语语
- 毕业典礼策划活动实施方案
- 新疆民族团结心得体会
- 笛卡尔及其哲学思想
- 电力实业有限公司业扩工程施工组织设计方案