20171224 MVCS / MVVM

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,
文字匹配,
文字转拼音 匹配

你可能感兴趣的:(20171224 MVCS / MVVM)