JavaScript 函数式编程 - - AOP (上)

 关于 AOP(Aspect Oriented Programming) – 面向切面编程的官方解释,可移步到百度百科 AOP解释

 本文以解决案例需求形式,阐述我对AOP编程的理解:

1、案例情景需求

  1. 首先以函数对象为例,有一个函数test,它的核心功能就是输出 2,
  2. 但是,现在想在处理核心功能前,先处理 before 函数其的工作内容是输出 1,
  3. 然后,执行核心功能函数
  4. 最后,执行 after 函数的,其工作内容是输出 3;

    // 核心功能函数
	function test() {
      console.log(2);
    }
    
    test();

需要思考的问题:

  1. before 与 after 函数该定义在哪个对象上?
  2. 如何控制,before test after 的执行顺序?
  3. 关于函数内部 this 指向的确定?(附加问题)
  4. before test after 参数的传递?(附加问题)

2、解决方案

直接上代码:

  • 第一、二个问题已经解决了。

     // 首先befor函数,after()函数肯定是定义在Function原型上的
     Function.prototype.before = function (beforeFn) {
      var _this = this; //this指向test
      return function () { //把返回的函数叫做 中间函数
        beforeFn();
        _this();
      };
    };
    Function.prototype.after = function (afterFn) {
      var _this = this; //this指向befor返回的 中间函数
      return function () {
        // 执行after之前先执行中间函数
        _this();
        // 然后执行afterFn
        afterFn();
      };
    };
    function test() {
      console.log(2);
    }
    // 这里test 变量增加了一点迷惑性
    var test = test.before(function () {  
      console.log(1);
    }).after(function () {
      console.log(3);
    });

    test(); // 1 2 3

3、完善解决方案(待续)

  1. 第三、四个问题,可以一起探讨,

4、讲讲AOP的理解

4.1、编程思想类型

嗯,,有许多编程思想(我接触过的):
(Oriented :面向 ,Programming:Programming)

  • POP (Procedure-Oriented Programming)- - 面向过程编程 ,其中语言有 C语言 等;
  • OOP (Object Oriented Programming) - - 面向对象编程 ,其中语言有 C++ ,Java等;
  • AOP (Aspect Oriented Programming) - - 面向切向编程 ,其中语言无,它是单纯的编程思想;

4.2、 AOP的优点

AOP 编程思想特点:利用AOP可以对业务逻辑的各个部分进行隔离,从而使得业务逻辑各部分之间的耦合度降低,提高程序的可重用性,同时提高了开发的效率

 从例子上讲:一整个业务 包括 before test after 三个部分,利用 AOP 分离,提高before 跟 after 的可重用性。这好像无法很好的解释为什么要把before 跟 after 分离出来,

我们看下一个案列情景:

例如:银行系统的取款流程和查询余额的流程中都有存在相同的验证流程

  • 取款 与 查询余额业务 都存在 验证用户代码块;
  • 我们横向把验证用户代码块抽离出来,如同上一个案例的before函数;
  • 是不是就 体现了 耦合度降低,提高程序的可重用性,同时提高了开发的效率

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值