什么是面向切面

初听面向切面编程时, 一头雾水, 什么是面向切面, 只听说过面向对象(OOP), 面向过程(PO), 函数式编程(FP), 面向切面 ? 面向的难道是某一个面?

面向搜索引擎后才了解到, 面向切面是一种编程范式(Aspect Oriented Programming), 简写 AOP, 特点是与原有逻辑解耦, 无侵入.

在后端开发工作中, 常见使用的场景是 断点调试/打印日志/…,

而在前端开发工作中, 应用场景比较灵活多变, 可以是在一次表单提交中, 在表单提交前作表单验证(前置), 或在表单提交后作数据刷新/页面跳转/Cookie 刷新等 (后置), 也可以在提交的同时作数据埋点(横向), 或是打印日志。。。

对于外部的新加入的逻辑, 为了不破坏原有的业务逻辑, 我们就可以使用 AOP 去组织代码, 分离 [业务逻辑] 与 [琐碎事务]

AOP 的关键概念点

前置(before) 在目标方法执行前执行

后置(after) 在目标方法执行后执行

异常(after throwing)在目标方法抛出异常时执行

环绕 (around) 在目标方法执行前后

前置执行函数

const before = function(fn, action) {

return function(...args) {

action.apply(this, args);

const res = fn.apply(this, args);

return { res, params: args };

};

};

后置执行函数

const after = function(fn, action) {

return function(...args) {

let res = fn.apply(this, args);

action.apply(this, args);

return { res, params: args };

};

};

异常执行函数

const throwing = function(fn, action) {

let ret = { res: undefined, params: undefined };

return function(...args) {

try {

const res = fn.apply(this, args);

return (ret = { res, params: args });

} catch (err) {

action.apply(this, args);

return (ret = { res: err, params: args });

}

};

};

环绕执行函数

const round = function(fn, actionBefore, actionAfter) {

return function(...args) {

actionBefore.apply(this, args);

const res = fn.apply(this, args);

actionAfter.apply(this, args);

return { res, params: args };

};

};

使用场景 — 请求记录

const request = config => axios.request(config);

const ButtonClickFn = function () {

...do something

}

document.querySelector('#submit').click = before(ButtonClickFn, () => {

request({

url: 'http://your_upload_log_url',

method: 'GET',

params:

{ TYPE: 'BUTTON_CLICK', POSITION: '' }

});

});

使用场景 — 异常处理

const originRequest = config => axios.request(config);

const wrapperedRequest = throwing(originRequest, function() {

...异常上报

});

其它实现方式

实际上除了使用高阶函数的方法实现, 我们还可以使用 ES7 的装饰器/Ojbect.defineProperty 实现, 或基于原型链去实现

作者:跨越银河Galaxy

vue面向切面_感受面向切面编程相关推荐

  1. java 切面_实用|AOP切面编程手段大汇总

    点击上方"欧学长的架构成长之路" 关注我 前言 首先说一下什么是AOP? AOP就是面向切面编程,它是一个思想,通过切面,我们可以将那些反复出现的代码抽取出来,放在一个地方统一处理 ...

  2. 面向对象是什么?为什么我们要先学面向过程,再学面向对象编程?到底什么是面向对象编程?

         面向对象是什么?为什么我们要先学面向过程,再学面向对象程?到底什么是面向对象编程? 回答:面向过程是计算机思维,计算机的思路就是取指执行,一条直道走到底,它可不会管你什么抽象,不管什么业务建 ...

  3. 命令式编程面向算法vs声明式编程面向描述

    面向(控制)执行 vs 面向描述 命令式编程面向算法vs声明式编程面向描述. 命令式编程面向:数据结构与算法: 算法 = 控制 + 逻辑: 命令式编程是行动导向(Action-Oriented)的,因 ...

  4. 【面向区块链应用的Java编程】

    目录 面向区块链应用的Java编程 1.什么是区块链 2.如何验证区块链 3.如何挖掘区块 4.区块链的工作方式 5.区块链的应用 5.1.比特币 5.2.智能合约 5.3.医疗 5.4.制造业和供应 ...

  5. 左室短轴切面_【图】短轴超声切面 - 心脏解剖学 - 天山医学院

    在标准左心室长轴切面基础上,将探头顺时针旋转90°,恰与左心室长轴垂直,可获得主动脉短轴切面(short axis section of aorta).沿该切面解剖心脏,中央为主动脉口横断面,可见主动 ...

  6. 左室短轴切面_一文读懂心脏超声基本切面

    一. 本文出现的英文简称 二.超声心动图基本切面 采用与心脏相互垂直的三个基本平面,主要观测心脏各房室腔内径.容积和室壁厚度及其相关解剖结构运动状态.功能等.检查中探头最常放置的位置包括心底部.心尖部 ...

  7. python交互式程序设计导论答案第五周_学堂在线_计算机科学与Python编程导论_章节测试答案...

    学堂在线_计算机科学与Python编程导论_章节测试答案 更多相关问题 素描的三种表现形式是:(). 运行下列程序:Private Sub form_Click()For i = 1 To 2x = ...

  8. Spring-AOP 切点/切面类型和创建切面

    概述 静态方法匹配器 动态方法匹配器 六种切点类型 静态方法切点StaticMethodMatcherPointcut 动态方法切点DynamicMethodMatcher 注解切点Annotatio ...

  9. Vue优化策略_项目发布_01

    文章目录 一.移除console 策略 1. 命令 1.1. 插件官网: 1.2. 安装babel-plugin-transform-remove-console 1.3. 在babel.config ...

最新文章

  1. 「文本信息抽取与结构化」目前NLP领域最有应用价值的子任务之一
  2. 机器学习将影响客户互动的8种方式
  3. What are current fashion trends in Sydney?
  4. .NET Framework终于开源了!
  5. 图的遍历DFS与BFS(邻接表)
  6. pandas 机器学习_机器学习的PANDAS
  7. ssl提高组周四备考赛【2018.10.18】
  8. 音视频多媒体协议相关资料汇总
  9. 1 计算机网络体系结构与OSI参考模型
  10. Mono for Android—初体验之“电话拨号器”
  11. 希尔排序不稳定例子_Python实现希尔排序(已编程实现)
  12. PaddleOCR问题汇总(1)
  13. android 联系人中,在超大字体下,加入至联系人界面(ConfirmAddDetailActivity)上有字体显示不全的问题...
  14. 20届美团提前批面经
  15. Atitit everthing placeholder index list 目录 1.1. sumdoc 2019 zipver t1---t91 1 1.2. 00 sumdoc ever
  16. 【阿狸的小伙伴win7主题】
  17. 微信永久封禁:从入门到精通
  18. 玩转软件|通过汉化WINRAR,手把手教你如何汉化软件
  19. Android+SpringBoot+Vue实现安装包前台上传,后台管理,移动端检测自动更新
  20. Win11删除资源管理器中的图片、文档等文件夹

热门文章

  1. 又一随机视频聊天网站内侧了,名字叫QQ偶遇,地址为:http://qq.17ouyu.com/
  2. 使用Jsch通过SFTP下载ZIP文件并解压
  3. golang对map排序
  4. 元旦英语祝福语-恭喜发财(十四)
  5. amd cpu 安卓模拟器_Android模拟器稳定版终于支持AMD处理器 开发者喜极而泣
  6. 2018年盈余管理-琼斯模型
  7. XSSFWorkbook
  8. 魅族Flyme 8终于来了,1000+优化升级体验,适配27款机型
  9. 基于Java的飞机大战游戏的设计与实现(论文+源码)
  10. java老年人健康预警系统系统uniapp小程序