MVCS
Store, Service.
配合 Aggregate Data Source.
在 dataSource 中, 处理 cell 数据。
将 数据 判断结果 甩出去。
DataSource
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
MyProductsCell *cell = [tableView dequeueReusableCellWithIdentifier: self.cellIdentifier forIndexPath: indexPath];
cell.myProduct = self.myProductItems[indexPath.row];
BOOL isCellContained = [self.tempSelectedArray containsObject: self.myProductItems[indexPath.row]];
if (self.myProductsCtrlDataSourceBlock) {
self.myProductsCtrlDataSourceBlock(cell, self.myProductItems[indexPath.row], isCellContained, indexPath);
}
return cell;
}
VC:
- (void)networkMyProductsCtrlStoreSuccess:(id)successData failure:(NSString *)failureStr;{
if (successData) {
NSArray *dataArray = (NSArray *)successData;
if (dataArray.count == 0) {
self.networkResult = EmptyData;
}
NSMutableArray *myProductsTempArray = [NSMutableArray array];
for (NSDictionary *dict in dataArray) {
MyProduct *myProducts = [MyProduct yy_modelWithDictionary:dict];
[myProductsTempArray addObject:myProducts];
}
self.myProductsCtrlDataSource = [[MyProductsCtrlDataSource alloc] initWithItems: myProductsTempArray cellIdentifier: kMyProductsCell configureCellBlock:^(MyProductsCell *cell, MyProduct *MyProduct, BOOL isCellContained, NSIndexPath *indexPath) {
if (isCellContained && self.myProductsTableView.editing) {
[self.myProductsTableView selectRowAtIndexPath: indexPath animated:YES scrollPosition:(UITableViewScrollPositionNone)];
}
}];
相同点,内部有 各种 分门别类的数据源, 经过 外部的简单参数,
相当于 各种材料 都在 手上,非常集中 ,非常爽滴 进行 复杂运算,数据加工,
返回给外部。
很明显, 这就是一层
Model Layer.
一层,就是 一统。
高度封装,就是高度定制化。
Store
外部数据 统一处理,
网络 与 持久化数据库
包括, 各种网络请求 增删改。
好像并没有 直接的 关联。
其实 就是 直接在里面 用Net API match 几下,改下实例 存储的 临时变量, 返回给外部 结果。
Aggregate TableView DataSource
内部数据,统一处理
getter
暴露出 readonly 的 数组,供外部查询。
setter
暴露出数据操作方法。
高度封装。
相当于API 调用。
外部传几个 很简单的 参数,
内部各种数据运算出结果,返回外部。
如果是,MVC,
VC 中
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
MyProductsCell *cell = [tableView dequeueReusableCellWithIdentifier: self.cellIdentifier forIndexPath: indexPath];
cell.myProduct = self.myProductItems[indexPath.row];
// cell.delegate = self;
if ([self.tempSelectedArray containsObject:cell.myProduct] && self.myProductsTableView.editing) {
[tableView selectRowAtIndexPath:indexPath animated:YES scrollPosition:(UITableViewScrollPositionNone)];
}
return cell;
}
不同的拆分,不同的写法, 实质上是不同的 逻辑思想,不仅仅是 对应 逻辑的翻译。就是 相同业务逻辑的翻译,使用胶水代码/语法糖
MVVM. 响应式。data binding.
否则 在 JS 中,又要改 视图,又要 改数据源。
传值,每次都要改变的,
用函数行为参数,
用 argument.
状态 需要保存一会的,
用 属性。
本地搜索,
ML,
文字匹配,
文字转拼音 匹配