• mvp设计模式


    一、设计模式的简单介绍

    MVP的 V 层是由UIViewController 和UIView 共同组成
    view 将委托presenter 对它自己的操作,(简单来说就是presenter发命令来控制view的交互,要你隐藏就隐藏,叫你show 你就乖乖的show)
    presenter拥有对 view交互的逻辑(就是上面说的意思)
    presenter跟model层通信,并将数据转化成对适应UI的数据并更新view
    presenter不需要依赖UIKit
    view层是单一,因为它是被动接受命令,没有主动能力

    二、设计模式中的通信方式

    presenter 作为业务逻辑的处理者,首先要向Service层拿数据赋值给model,所以它将可以向model层通信。其次,UI的处理权移交给了它,所以它需要与view成通讯,发送命令更新UI。同时,UI的响应将触发业务逻辑的处理,所以view 层向presenter层通讯,告诉他用户做了什么操作,需要你反馈对应的数据来更新UI。这样就完成了从用户交互获得交互反馈到整个业务逻辑。
     
    三、设计模式的实现
    1.UserViewProtocol 协议定义了一下方法,这些方法其实就是presenter对view层发送的命令:
    #import "UserModel.h"
    
    @protocol UserViewProtocol <NSObject>
    
    - (void)userViewDataSource:(NSArray<UserModel *> *)data;
    - (void)showIndicator;
    - (void)hideIndicator;
    - (void)showEmptyView;
    
    @end
    

    2.协议中的几个方法实现

    - (void)userViewDataSource:(NSArray<UserModel *> *)data {
    
        self.friendlyUIData = data;
    
        [self.tableView reloadData];
    
    }
    
    - (void)showIndicator {
    
        [self.indicatorView startAnimating];
    
        self.indicatorView.hidden = NO;
    
    }
    
    - (void)hideIndicator {
    
        [self.indicatorView stopAnimating];
    
    }
    
    - (void)showEmptyView {
    
        UIAlertController *alertView = [UIAlertController alertControllerWithTitle:@"Alert"message:@"show empty view" preferredStyle:UIAlertControllerStyleAlert];
    
        [alertView addAction:[UIAlertAction actionWithTitle:@"确定"style:UIAlertActionStyleDefault handler:**nil**]];
    
        [self presentViewController:alertView animated:YES completion:^{
    
        }];
    
    }
    

    3.是presenter 可以直接拿到实现了UserViewProtocol 协议的对象,并且向他发送命令

    @interface Presenter : NSObject
    
    /**
    
     将一个实现了 UserViewProtocol 协议的对象绑定到 presenter上来
    
     @param view 实现了UserViewProtocol的对象,一般来说,应该就是控制器,在MVP中,V 和 VC 共同组成UI 层
    
     */
    
    - (void)attachView:(id <UserViewProtocol>)view;
    
    /**
    
     这个是对外的入口,通过这个入口,实现多个对内部的操作,外部只要调用这个接口就可以了
    
     */
    
    - (void)fetchData;
    
    @end
    

     

    by:ml

      

  • 相关阅读:
    Sass变量、嵌套
    遮罩层2
    遮罩层
    大图轮播
    项目资料(主页)
    关于时间控制和制定时间日期
    dom作业
    js的dom操作和函数
    js数组去重
    js For循环练习。
  • 原文地址:https://www.cnblogs.com/widgetbox/p/11268558.html
Copyright © 2020-2023  润新知