一、MVC
什么是MVC(Model - View - Controller)设计模式?
首先来了解一下, 一个程序页面它有什么 : 撇开表面上看到的种种, 可以把一个页面包含归为
①. 数据 — model层
②. 呈现方式 — view层
③. 数据与呈现方式之间的关系 — control层
我们可以把这三者叫三个不同的职责。这三个职责可以应用在不同的思维层面上,比如系统架构上,软件架构设计上,程序设计上。只要我们从这三个角度来考虑,就是应用了MVC设计模式了。
接下来看一段代码 :
假设Controller View Model 分别如下M:Model(模型Model)
V:ModelCell(自定义的 UITableViewCell, 用于展示数据)
C:ViewController (控制器Controller)
控制器(ViewController) 代码如下
- (void) requestData {
// 1.发起网络请求,获取到服务器的数据,并将其转化成模型数据(`model`)
// 2.添加到数据源(`dataSource`)
// 3.最后刷新表格`[self.tableView reloadData]`,配置`modelCell`
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
ModelCell *cell = [tableView dequeueReusableCellWithIdentifier:@"modelCell"];
cell.models = self.dataSource[indexPath.row];
return cell;
}
View(ModelCell)代码实现
ModelCell.h
@class Model;
@interface SUGoodsCell : UITableViewCell
@property (nonatomic, strong) Model *model;
@end
ModelCell.m
@implementation ModelCell
- (void)setModel:(Model *)model {
_model = model
/// config data ....
}
@end
MVC有什么缺点
1. 厚重的controller层 : 虽然使用MVC已经尽量的把view model controller进行了分离, 但是还是无法避免controller的 臃肿 2. 无处安放的网络逻辑 : 因为网络调用应该使用异步, 大多时候都是将网络逻辑写在了Controller层,这也是导致 Controller层比较厚重的原因
MVC 虽然只有三层,但是它并没有限制你只能有三层。所以,我们可以将 Controller 里面过于臃肿的逻辑抽取出来,形成新的可复用模块或架构层次。
例如 : 把Controller中公共的逻辑统一使用一个基类进行处理,对一些重复的代码进行代码抽取处理等等,这样可以使得代码结构看起来更加清晰,也完成了瘦身。