iOS 架构模式Demo解析

架构模式

原文链接 : 链接

一个整体的分层? 逻辑清晰? 还是清晰的分工? 对于架构模式来说并没有一个非常明确的定义, 比较抽象, 在于设计在于架构, 不管是小到类与类之间的交互, 还是不同的小模块, 小版块之间, 甚至于在不同的业务之间, 我们都可以去从架构的方面去理解, 去分析

基本的架构基础

那么我们平时开发用到的代理, block当然也是起到解耦合, 使代码的耦合度降低, 通知可以解决两者之间的相互引用并且实现解耦合
那么在iOS中常见的架构来说, 常见有哪些呢? MVC架构, MVP架构, MVVM架构
当然这些架构都有一个共同特点: 解耦合

MVC

本身来说View和Model, 但是在实际开发使用的时候, 还是有联系的, 这个平时开发的比较多, 下图是我简单画的一个关系图, 说明了三者之间的关系

MVP

下图画的一个简单的关系图, 那么我们根据这个简单的关系图用一个简单的demo来演示MVP是怎么进行两者中的关系处理的
面向接口编程

Demo解析

首先要声明, MVP是有Controller的

  1. 首先我们来创建几个类, Presenter类, MVPView类, MVPModel类
  2. 在Controller导入类, 初始化

    1
    2
    3
    4
    5
    6
    _presenter = [[Presenter alloc]init];
    _mvpView = [[MVPView alloc]init];
    _mvpView.frame = self.view.bounds;
    [self.view addSubview:_mvpView];
    _mvpModel = [[MVPModel alloc]init];
    //model处理---稍后处理
  3. 在MVPModel中定义属性

    1
    @property (nonatomic,copy)NSString *content;
  4. 在MVPView并不可以提取数据, 因为在MVP模式中我们的V和M是没有直接联系的, 所以这里我们提供一个方法, 给我们的Presenter类

    1
    - (void)showView: (NSString *)content;
  5. 此时我们来处理Presenter, 在Presenter类中声明model和view属性, 并且来增加一个方法
    声明

    1
    2
    3
    @property (nonatomic,strong)MVPModel *model;
    @property (nonatomic,strong)MVPView *view;
    - (void)usageLogic;

    实现, 那么我们在这里进行一个数据的中间处理

    1
    2
    3
    4
    5
    - (void)usageLogic{
    NSString *content = self.model.content;
    //通过Presenter将model赋值
    [self.view showView:content];
    }
  6. 在MVPView类处理view的UI

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    - (instancetype)init
    {
    self = [super init];
    if (self) {
    //此处我们进行初始化
    }
    return self;
    }
    - (void)showView: (NSString *)content{
    //方法数据处理, 此处我写的是伪代码和思路
    //self.label.text = content;
    }
  7. 在Controller中处理未处理的model赋值处理

    1
    2
    3
    4
    5
    _mvpModel.content = @"MVP模式";
    // model还没赋值---->此处在view中的是伪代码,只需要在view根据伪代码直接处理
    _presenter.model = _mvpModel;
    _presenter.view = _mvpView;
    [_presenter usageLogic];

MVP总结

假如说我们需要处理点击事件, 那么可以在View中使用代理, 或者block, 之前使用MVC使用C来遵守协议, 那么MVP的话是怎样处理, 在P中来实现的, 逻辑处理是在P中来处理的, 此处MVP中的遵守协议一般情况下写在P中
好了, 给大家这个简单demo, 当然在代码中也写了注释, 可以去我的git下载, 欢迎star
下载链接 : demo地址

MVVM

下图是我简单画的一个关系图, 说明了三者之间的关系

Demo解析

这里我们也通过一个小Demo来简单理解一下, 不过多的去说绕来绕去的东西, 直接上代码, 在开发中实际应用

  1. 首先我们来创建几个类, MVVMModel类, MVVMView类, MVVMViewModel类
  2. 在Controller导入类, 初始化

    1
    2
    3
    4
    5
    6
    7
    self.mvvmview = [[MVVMView alloc]init];
    self.viewModel = [[MVVMViewModel alloc]init];
    self.mvvmview.frame = self.view.bounds;
    [self.view addSubview:self.mvvmview];
    //model处理--稍后处理
    self.model = [[MVVMModel alloc]init];
    self.model.content = @"MVVM架构模式";
  3. 在MVVMModel中定义属性

    1
    @property (nonatomic,copy)NSString *content;
  4. 在MVVMView并中定义viewModel属性
    声明

    1
    2
    3
    @property (nonatomic, strong) MVVMViewModel *vm;
    - (void)showView:(MVVMViewModel *)viewModel;

    实现, 传入

    1
    2
    3
    4
    5
    6
    //实现
    [self.KVOController observe:viewModel keyPath:@"contentStr" options:NSKeyValueObservingOptionInitial||NSKeyValueObservingOptionNew block:^(id _Nullable observer, id _Nonnull object, NSDictionary<NSKeyValueChangeKey,id> * _Nonnull change) {
    //此处使用的是伪代码
    //实现双向绑定
    //_label.text = change[NSKeyValueChangeNewKey]
    }];
  5. 此时我们来处理MVVMViewModel, 在MVVMViewModel类中中介字符, 并且来增加一个方法
    声明

    1
    2
    3
    @property (nonatomic,copy)NSString *contentStr;
    @property (nonatomic,strong)MVVMModel *model;
    - (void)setWithModel:(MVVMModel *)model;

    实现, 那么我们在这里进行一个数据的中间处理

    1
    2
    3
    4
    - (void)setWithModel:(MVVMModel *)model{
    self.model = model;
    self.contentStr = self.model.content;
    }
  6. 在Controller中处理未处理的model赋值处理

    1
    2
    3
    4
    5
    //model处理--稍后处理
    self.model = [[MVVMModel alloc]init];
    self.model.content = @"MVVM架构模式";
    [_viewModel setModel:_model];
    [_mvvmview showView:_viewModel];

MVVM总结

响应式编程
也是由MVC来演变过来的, 和MVC相比的话, 我们的V取代了C中的业务逻辑处理, ViewModel并不是单纯的业务逻辑类, 和我们的View和Model是相互关联的, 并且进行了双向的绑定
假如说我们要添加点击事件,我们可以在ViewModel中来处理点击方法逻辑, 然后在我们View中导入ViewModel, 在View中点击调用点击方法的具体逻辑就可以了

好了, 给大家这个简单demo, 当然在代码中也写了注释, 可以去我的git下载, 欢迎star
下载链接 : demo地址

技术交流q群150731459

吃粑粑的毕教授 wechat
欢迎您扫一扫上面的微信公众号,订阅文章!

本文标题:iOS 架构模式Demo解析

文章作者:吃粑粑的毕教授

发布时间:2017年11月28日 - 20:11

最后更新:2017年11月28日 - 21:11

原始链接:http://www.2bjs.com/架构/架构模式/

许可协议: 署名-非商业性使用-禁止演绎 4.0 国际 转载请保留原文链接及作者。

给糖吃的人都是最美丽最帅气的人,感谢你们哦
0%