1、架构
1.1、架构简介
架构(Architecture)是软件开发中的设计方案,比如类与类之间的关系、模块与模块之间的关系、客户端与服务端的关系。
iOS中经常听到的架构名词有MVC、MVP、MVVM、VIPER、CDD,以及三层架构、四层架构等。
1.2、MVC - Apple版
Controller持有并管理View,View的事件反馈给Controller进行处理。
Controller持有并管理Model,Model发生变化需要Controller更新View显示。
代码举例:
// 读取model
NewsModel *model = self.newsData[indexPath.row];
// 配置cell
cell.textLabel.text = model.title;
cell.detailTextLabel.text = model.content;
优点:View、Model可以重复利用,可以独立使用
缺点:Controller的代码过于臃肿
1.3、MVC - 变种
Controller持有并管理View,View的事件反馈给Controller进行处理。
Controller持有并管理Model,View绑定Model。
*可以利用代理或者Block把View的事件反馈给Controller
代码举例:
// 配置cell
- (void)setModel:(NewsModel *)model {
_model = model;
self.textLabel.text = model.title;
self.detailTextLabel.text = model.content;
}
优点:对Controller进行瘦身,将View内部的细节封装起来了,外界不知道View内部的具体实现
缺点:View依赖于Model
1.3、MVP
Presenter相当于取代了MVC架构中的Controller的角色,当一个Controller中有多个功能模块时,每个Presenter负责一个模块,减少Controller代码量。
@interface NewsPresenter : NSObject
// Presenter弱引用controller
@property (nonatomic, weak) UIViewController *controller;
@end
在Controller中添加Presenter:
self.newsPresenter = [[NewsPresenter alloc] init];
self.newsPresenter.controller = self;
1.4、MVVM
结构和MVP相似,唯一不同的地方是ViewModel和View有一个绑定关系,当数据改变时View显示会自动更新。
可以使用 RAC 进行绑定,也可以使用 KVOController ,这里以KVOController为例:
- (void)setViewModel:(NewsViewModel *)viewModel {
_viewModel = viewModel;
// 添加绑定
__weak typeof(self)weakSelf = self;
[self.KVOController observe:viewModel keyPath:@"name" options:NSKeyValueObservingOptionNew block:^(id _Nullable observer, id _Nonnull object, NSDictionary<NSKeyValueChangeKey,id> * _Nonnull change) {
weakSelf.text = change[NSKeyValueChangeNewKey];
}];
}
当监听到viewModel的name属性变化时,会自动更新view的显示。
1.5、分层架构
在实际开发中,代码可以进行分层处理:
UI层:负责界面展示(MVC、MVP、MVVM)
业务层:负责逻辑功能
数据层:负责管理网络数据、本地数据
2、设计模式
2.1、设计模式简介
设计模式(Design Pattern),是一套被反复使用,代码设计经验的总结,概念上比架构小一点,研究的是类和类之间的关系。
使用设计模式的好处是:可重用代码、让代码更容易让他人理解、保证代码可靠性。一般与编程语言无关,是一套比较成熟的编程思想。
2.2、设计模式分类
1、创建模式:对象实例化的模式,用于解耦对象的实例化过程
例如单例模式、工厂方法模式等。
2、结构型模式:把类或对象结合在一起形成一个更大的结构
例如代理模式、适配器模式、组合模式、装饰模式等。
3、行为型模式:类或对象之间如何交互,及划分责任和算法
例如观察者模式、命令模式、责任链模式等。