PHP 管道模式+Aop编程思想的理解和使用

管道模式+AOP编程思想 在特定的场景下面使用的话简直是神器,laravel中间件也是用的这个模式实现还有tp。日常开发中使用起来代码看起来也牛逼多了,能够使代码的结构非常清晰
AOP 的优点就在于动态的添加功能,而不对其它层次产生影响,不会入侵业务逻辑代码,可以非常方便的添加或者删除功能

管道模式的理解:打比方有一个下污水过滤器(pipeline类),水就是下面例子的data,过滤器里面有过滤装置N层,也就是下面例子的pipes,这里我们只有2个过滤规则(checkName和checkAge),然后把水放到过过滤器进行过滤,第一层(checkName)可能是负责过滤比较大的杂质过滤完之后将水流入第二层过滤(checkAge),第二层可能就是炭包,可以过滤掉比较细小的沙粒和部分微生物。最终得到干净的水。
如果我们需要加入新的规则也很简单,新增一个过滤规则类,然后加入到pipes过滤规则数组里面就可以了。对我们业务逻辑没有任何入侵操作

要从污水到干净的水就下面几行代码就可以实现了

$pipes = [
    new CheckAge,
    new CheckName
];
$re = (new Pipeline())
    ->send($data) //需要过滤的数据
    ->through($pipes) //过滤规则类
    ->then(function ($e) {
   
    return $e;
}); //对过滤后的数据进行自定义处理(这里直接返回了,没做任何处理)

理解里面的原理,并且通过我自己的理解然后写出来,对我来说确实有点难度,好在通过几天的空余时间的终于写出来了。

我觉得比较难得,和我被卡主的地方就在于开始忽略了执行顺序其实最终array_reduce只是生成了一个匿名函数,并没有执行pipes里面的类。生成了匿名函数之后在then方法的return $re( $this->data )才开始执行的。

下面来正式理解一下代码(完整的代码在最后):

变量 作用
data 需要进行过滤的数据
pipes 过滤规则类的数组
method 规则类默认执行的方法名称
函数 作用
array_reduce 有3个参数 1 pipes:过滤规则类数组,2 方法名:有2个参数,第一个是方法执行完成的返回值(第一次如果有第三个参数那么就是第三个参数),第二个是pipes里面遍历出来的类,3 第一次执行函数时传递传递到方法的第一个参数。(看起来有点绕,如果不明白可以写个针对这个函数的简单例子自己实现一下,开始可以不用匿名函数,不考虑aop思想,方便理解)理解管道模式这个函数的理解是必须的
方法 作用
send 方法接受了需要过滤的数据
through 方法接受了过滤规则类数组
then 接受了对返回值进行处理的匿名函数,并且执行了array_reduce函数生成了匿名函数(这里只是生成了匿名函数,并没有执行过滤规则类的代码)

then方法的array_reduce函数最终会生成如下匿名函数,然后通过$re( $this-> $data )这里传递了需要过滤的数据进行执行匿名方法。

$re = function ($data) {
   

    return (new CheckName)->handle($data, function ($data) {
   

        return (new CheckAge())->handle($data, function ($e) {
   

            return $e;
        
  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值