AOP(Aspect Oriented Program)表示面向切面编程,它是OOP的补充,主要作用是将多个OOP模块中的通用代码抽取出来。切面的意思是系统中的一些通用功能,例如日志记录,缓存或验证。
例如,下面代码包含了日志记录等功能全部耦合在代码中,难以维护。
function sample(arg: string) {
console.log("sample: " + arg);
if(!isUserAuthenticated()) {
throw new Error("User is not authenticated");
}
if(cache.has(arg)) {
return cache.get(arg);
}
const result = 42; // TODO complex calculation
cache.set(arg, result);
return result;
}
通过TypeScript装饰器可以改写如下形式:
@log
@authorize
@cache
function sample(arg: string) {
const result = 42;
return result;
}
在JS中使用装饰器,可以参考该提案