avatar

Catalog
iOS架构设计06-分层架构

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

三层架构

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

  • 界面层

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

  • 业务层

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

  • 数据层

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

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

  • 首先,界面层

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

  • 业务层

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

  • 数据层

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

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

  • 好处就是

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

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

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

Code
1
2
3
4
5
[XXNewsService loadNews:@{} success:^(NSArray *newsData) {

} failure:^(NSError *error) {

}];

我们新建一个XXNewsService

Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
@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

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

Code
1
2
3
4
5
6
7
8
9
10
11
12
@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

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

总结

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

明天我们来说说内存管理

点此进入我的博客也会同步更新

One More Thing

点击查看 2020—课程列表 全网IT各种资源有需求的可以微我,或者你喜欢的课程都可以给我发链接剩下的我来搞定

喜欢的朋友可以扫描关注我的公众号(多多点赞,多多打赏,您的支持是我写作的最大动力)关注有福利可以使用免费梯子自由上网

iOS_DevTips

Author: 木子召
Link: https://lizhaobomb.github.io/2020/03/11/iOS%E6%9E%B6%E6%9E%84%E8%AE%BE%E8%AE%A106-%E5%88%86%E5%B1%82%E6%9E%B6%E6%9E%84/
Copyright Notice: All articles in this blog are licensed under CC BY-NC-SA 4.0 unless stating additionally.
Donate
  • 微信
    微信
  • 支付寶
    支付寶

Comment