好用的Middleware实现

  • 时间:2020-04-24 21:10 作者:马修王 来源: 阅读:984
  • 扫一扫,手机访问
摘要:koa的Middleware 经典的洋葱造型,在执行一个操作之前会先一层层的执行配置好的中间件,操作执行结束后再一层层的回溯。在日常的iOS开发中,我们总是会遇这样的少量场景:1.前往某个页面,但是之前需要做多种的校验;2. 执行某个操作,但是需要先调用不同的方法去准备少量数据等等。无论是这些校验

koaMiddleware--经典的洋葱造型,在执行一个操作之前会先一层层的执行配置好的中间件,操作执行结束后再一层层的回溯。


在日常的iOS开发中,我们总是会遇这样的少量场景:1.前往某个页面,但是之前需要做多种的校验;2. 执行某个操作,但是需要先调用不同的方法去准备少量数据等等。无论是这些校验或者者数据的准备假如都放在目标方法或者者模块内都不是很合适,由于这些和目标的业务无关而且很有可能变化,比方去掉或者添加一种校验。这样我们就需要使用Middleware来实现这种自由的组合场景。

设计思想

Middleware的一个主要思想就是需要一个Compose来保存所有的Middleware,每一个Middleware会有一个- (void)invoke:(id)context next:(NoneParamBlock)next方法,当Middleware开始执行的时候会调用这个方法,这个方法接受外面传进来的公共参数和一个next()回调用来移交执行权到下一个Middleware

源码

MathewWang/WWMiddleware

Demo

先创立三个Middleware的filter子类

#import <Cocoa/Cocoa.h>#import "ORMiddleWare.h"@interface FirstFilter : ORMiddleWare@end#import "FirstFilter.h"@implementation FirstFilter- (void)invoke:(id)context next:(NoneParamBlock)next{    NSLog(@"first filter doing work with context: %@", context);    //执行权移交    next();    NSLog(@"first filter doing cleanup with context: %@", context);}
#import <Cocoa/Cocoa.h>#import "ORMiddleWare.h"@interface SecondFilter : ORMiddleWare@end#import "SecondFilter.h"@implementation SecondFilter- (void)invoke:(id)context next:(NoneParamBlock)next{    NSLog(@"second filter doing work with context: %@", context);    //执行权移交    next();    NSLog(@"second filter doing cleanup with context: %@", context);}@end
#import <Cocoa/Cocoa.h>#import "ORMiddleWare.h"@interface ThirdFilter : ORMiddleWare@end#import "ThirdFilter.h"@implementation ThirdFilter- (void)invoke:(id)context next:(NoneParamBlock)next{    NSLog(@"third filter doing work with context: %@", context);    //执行权移交    next();    NSLog(@"third filter doing cleanup with context: %@", context);}@end

最后将三个中间件组合,并执行业务代码

#import <Foundation/Foundation.h>#import "ORCompose.h"#import "FirstFilter.h"#import "SecondFilter.h"#import "ThirdFilter.h"int main(int argc, const char * argv[]) {    @autoreleasepool {        [ORCompose compose:@[[FirstFilter new],                             [SecondFilter new],                             [ThirdFilter new]]]        .run(@"context", ^{            NSLog(@"doing business");        });    }    return 0;}//结果//first filter doing work with context: context//second filter doing work with context: context//third filter doing work with context: context//doing business//third filter doing cleanup with context: context//second filter doing cleanup with context: context//first filter doing cleanup with context: context

结束,简单好用。

  • 全部评论(0)
最新发布的资讯信息
【系统环境|】2FA验证器 验证码如何登录(2024-04-01 20:18)
【系统环境|】怎么做才能建设好外贸网站?(2023-12-20 10:05)
【系统环境|数据库】 潮玩宇宙游戏道具收集方法(2023-12-12 16:13)
【系统环境|】遥遥领先!青否数字人直播系统5.0发布,支持真人接管实时驱动!(2023-10-12 17:31)
【系统环境|服务器应用】克隆自己的数字人形象需要几步?(2023-09-20 17:13)
【系统环境|】Tiktok登录教程(2023-02-13 14:17)
【系统环境|】ZORRO佐罗软件安装教程及一键新机使用方法详细简介(2023-02-10 21:56)
【系统环境|】阿里云 centos 云盘扩容命令(2023-01-10 16:35)
【系统环境|】补单系统搭建补单源码搭建(2022-05-18 11:35)
【系统环境|服务器应用】高端显卡再度登上热搜,竟然是因为“断崖式”的降价(2022-04-12 19:47)
手机二维码手机访问领取大礼包
返回顶部