iOS架构设计06-分层架构

今天我们来看看所谓的三层、四层架构是什么东西?我们可以画个图来分析下

iOS架构设计06-分层架构

三层架构

其实所谓的这个三层架构,一般来说,把我们项目中所有的类,不管控制器也好,View也好,模型也好,或者一些工具类,这些类我们都把它分成三个层次

  • 界面层

主要就是用来显示界面的控制器、View

  • 业务层

用来处理我们的业务的,比如我们有登录业务或者加载新闻列表业务,或者购物车等等,相当于我们说的一个功能

  • 数据层

主要是指网络数据,本地数据库

举个例子,假如我要显示一个新闻页面,那该如何对应这些层呢?

  • 首先,界面层

新闻列表(TableView)肯定属于界面层,界面层要显示数据肯定要加载数据

  • 业务层

我们可以交给业务层来加载,那业务层就会有一个叫加载新闻数据的业务,那它数据从哪里来呢?

  • 数据层

这个时候就交给数据层来做,数据层数据可能来源于网络或者本地数据库,

那这样分层有什么好处呢?

  • 好处就是

假设我们没有业务层这个东西,那就意味着,界面层直接去访问数据层,这样的话界面层就需要去关心,我们网络请求地址,参数,那假如是数据库的话,可能还需要关心数据库的底层实现(表,字段等等),但是我们一旦分层了就不需要这样了,界面层只关心我要加载数据只需要去调用业务层的加载新闻数据,至于这个数据是通过网络还是本地数据库统统不用关心

可能说的有点抽象,我们写个简单的demo来看看

首先我们的ViewController肯定是属于界面层了这个毋庸置疑了,它需要去加载新闻列表数据,只需要调用下业务层的加载新闻数据

<code>[XXNewsService loadNews:@{} success:^(NSArray *newsData) {

} failure:^(NSError *error) {

}];/<code>

我们新建一个XXNewsService

<code>@interface XXNewsService : NSObject
+ (void)loadNews:(NSDictionary *)params success:(void (^)(NSArray *newsData))success failure:(void (^)(NSError *error))failure;
@end

@implementation XXNewsService

+ (void)loadNews:(NSDictionary *)params success:(void (^)(NSArray *newsData))success failure:(void (^)(NSError *error))failure
{
// 先取出本地数据
// [XXDBTool loadLocalData....];

// 如果没有本地数据,就加载网络数据
// [XXHTTPTool GET:@"xxxx" params:nil success:^(id result) {
// success(array);
// } failure:failure];
}
@end/<code>

然后新建我们的数据层假设就是XXHTTPTool和XXDBTool,我就大概写一下

<code>@interface XXHTTPTool : NSObject
+ (void)GET:(NSString *)URL params:(NSDictionary *)params success:(void (^)(id result))success failure:(void (^)(NSError *error))failure;
@end

@implementation XXHTTPTool

+ (void)GET:(NSString *)URL params:(NSDictionary *)params success:(void (^)(id))success failure:(void (^)(NSError *))failure
{
// 调用AFN
}


@end/<code>

那四层是怎么回事呢,一般无非就是把数据层又拆出一层网络层,当然这个也不一定,看每个项目的具体情况

iOS架构设计06-分层架构

四层架构

总结

架构这种东西本身就是很抽象的,光靠说是说不清楚的,还是需要多做项目,然后应用起来,这个就先告一段落,接下来我打算写内存管理和多线程方面的东西了

明天我们来说说内存管理


分享到:


相關文章: