vue面向切面_感受面向切面编程
什么是面向切面
初听面向切面编程时, 一头雾水, 什么是面向切面, 只听说过面向对象(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面向切面_感受面向切面编程相关推荐
- java 切面_实用|AOP切面编程手段大汇总
点击上方"欧学长的架构成长之路" 关注我 前言 首先说一下什么是AOP? AOP就是面向切面编程,它是一个思想,通过切面,我们可以将那些反复出现的代码抽取出来,放在一个地方统一处理 ...
- 面向对象是什么?为什么我们要先学面向过程,再学面向对象编程?到底什么是面向对象编程?
面向对象是什么?为什么我们要先学面向过程,再学面向对象程?到底什么是面向对象编程? 回答:面向过程是计算机思维,计算机的思路就是取指执行,一条直道走到底,它可不会管你什么抽象,不管什么业务建 ...
- 命令式编程面向算法vs声明式编程面向描述
面向(控制)执行 vs 面向描述 命令式编程面向算法vs声明式编程面向描述. 命令式编程面向:数据结构与算法: 算法 = 控制 + 逻辑: 命令式编程是行动导向(Action-Oriented)的,因 ...
- 【面向区块链应用的Java编程】
目录 面向区块链应用的Java编程 1.什么是区块链 2.如何验证区块链 3.如何挖掘区块 4.区块链的工作方式 5.区块链的应用 5.1.比特币 5.2.智能合约 5.3.医疗 5.4.制造业和供应 ...
- 左室短轴切面_【图】短轴超声切面 - 心脏解剖学 - 天山医学院
在标准左心室长轴切面基础上,将探头顺时针旋转90°,恰与左心室长轴垂直,可获得主动脉短轴切面(short axis section of aorta).沿该切面解剖心脏,中央为主动脉口横断面,可见主动 ...
- 左室短轴切面_一文读懂心脏超声基本切面
一. 本文出现的英文简称 二.超声心动图基本切面 采用与心脏相互垂直的三个基本平面,主要观测心脏各房室腔内径.容积和室壁厚度及其相关解剖结构运动状态.功能等.检查中探头最常放置的位置包括心底部.心尖部 ...
- python交互式程序设计导论答案第五周_学堂在线_计算机科学与Python编程导论_章节测试答案...
学堂在线_计算机科学与Python编程导论_章节测试答案 更多相关问题 素描的三种表现形式是:(). 运行下列程序:Private Sub form_Click()For i = 1 To 2x = ...
- Spring-AOP 切点/切面类型和创建切面
概述 静态方法匹配器 动态方法匹配器 六种切点类型 静态方法切点StaticMethodMatcherPointcut 动态方法切点DynamicMethodMatcher 注解切点Annotatio ...
- Vue优化策略_项目发布_01
文章目录 一.移除console 策略 1. 命令 1.1. 插件官网: 1.2. 安装babel-plugin-transform-remove-console 1.3. 在babel.config ...
最新文章
- 「文本信息抽取与结构化」目前NLP领域最有应用价值的子任务之一
- 机器学习将影响客户互动的8种方式
- What are current fashion trends in Sydney?
- .NET Framework终于开源了!
- 图的遍历DFS与BFS(邻接表)
- pandas 机器学习_机器学习的PANDAS
- ssl提高组周四备考赛【2018.10.18】
- 音视频多媒体协议相关资料汇总
- 1 计算机网络体系结构与OSI参考模型
- Mono for Android—初体验之“电话拨号器”
- 希尔排序不稳定例子_Python实现希尔排序(已编程实现)
- PaddleOCR问题汇总(1)
- android 联系人中,在超大字体下,加入至联系人界面(ConfirmAddDetailActivity)上有字体显示不全的问题...
- 20届美团提前批面经
- Atitit everthing placeholder index list 目录 1.1. sumdoc 2019 zipver t1---t91	1 1.2. 00 sumdoc ever
- 【阿狸的小伙伴win7主题】
- 微信永久封禁:从入门到精通
- 玩转软件|通过汉化WINRAR,手把手教你如何汉化软件
- Android+SpringBoot+Vue实现安装包前台上传,后台管理,移动端检测自动更新
- Win11删除资源管理器中的图片、文档等文件夹
热门文章
- 又一随机视频聊天网站内侧了,名字叫QQ偶遇,地址为:http://qq.17ouyu.com/
- 使用Jsch通过SFTP下载ZIP文件并解压
- golang对map排序
- 元旦英语祝福语-恭喜发财(十四)
- amd cpu 安卓模拟器_Android模拟器稳定版终于支持AMD处理器 开发者喜极而泣
- 2018年盈余管理-琼斯模型
- XSSFWorkbook
- 魅族Flyme 8终于来了,1000+优化升级体验,适配27款机型
- 基于Java的飞机大战游戏的设计与实现(论文+源码)
- java老年人健康预警系统系统uniapp小程序