AOP
AOP(面向切面编程)的主要作用是把一些跟核心业务逻辑模块无关的功能抽离出来,这些跟业务逻辑无关的功能通常包括日志统计、安全控制、异常处理等。把这些功能抽离出来之后, 再通过“动态织入”的方式掺入业务逻辑模块中。
AOP的好处
AOP的好处首先是可以保持业务逻辑模块的纯净和高内聚性,其次是可以很方便地复用日志统计等功能模块。
例子
// 定义before 和 after
Function.prototype.before = function(beforeFn){
let _self = this;
return function(){
beforeFn.apply(this, arguments);
_self.apply(this, arguments)
}
}
Function.prototype.after = function(afterFn){
let _self = this;
return function(){
_self.apply(this, arguments);
afterFn.apply(this, arguments)
}
}
// 登陆前
function LogBeforeLogin(params){
console.log(`${params.name} gets ready to login in , do some logs before it`)
}
// 登陆后
function LogAfterLogin(params){
console.log(`${params.name} success to login in , do some logs before it`)
}
// 登陆
function Login(user){
if(user.name === 'jensonliu' && user.password === '123'){
console.log('登录成功')
}
}
// 一般来说不会同时用before和after来做切面,这是只是展示一下
let login = Login.before(LogBeforeLogin).after(LogAfterLogin)
login({
name:'jensonliu',
password:'123'
})
print:
jensonliu gets ready to login in , do some logs before it
登录成功
jensonliu success to login in , do some logs before it
ES7 中的AOP
es7中提供了装饰器模块,也用到了AOP的思想:https://blog.csdn.net/qq_38765789/article/details/102406906