Typescript装饰器AOP示例详解
鱼露 人气:0在Typescript中使用装饰器
上文中讲了装饰模式,今天来来介绍一些Typescript里面的装饰器,以及如何用装饰器来实现之前提及装饰模式,装饰器只是实现装饰模式的一种方式,并非唯一
配置
在Typescript要使用装饰器需要在tsconfig打开装饰器的语法
"compilerOptions": { "experimentalDecorators": true }
类装饰器
在Typescript中我们可以对一个class用装饰器进行拓展,比如下面的例子, 会打印出'target is class A'的log日志;
const injectable = () => (target: { new (...args: any[]): {} }) => { console.log('target is ',target) }; @injectable() class A {}
在类装饰器中我们可以获取到这个类,从而对他进行拓展
比如我们可以为这个类实现拓展
const AddName = (name: string) => (cls: { new (...args: any[]): {} }) => { cls.prototype.name = name } @AddName('name') class A { age = 18 } const a = new A() console.log(a.name) console.log(a.age)
方法装饰器
方法装饰器的语法如下,你可以获取到当前类,方法名,以及该属性的描述符
const log = () => { return (target: any, propertyKey: string, descriptor: PropertyDescriptor) => { console.log(target, propertyKey, descriptor) }; } class A { @log say() {} }
打印如下
A: {}, "say", {
"writable": true,
"enumerable": false,
"configurable": true
}
那么方法装饰器可以用来做什么呢?
AOP就是其中一个例子
AOP(面向切面编程)
在软件业,AOP为Aspect Oriented Programming的缩写,意为:[面向切面编程],通过[预编译]方式和运行期间动态代理实现程序功能的统一维护的一种技术。
AOP是[OOP]的延续,是软件开发中的一个热点,也是[Spring]框架中的一个重要内容,是[函数式编程]的一种衍生范型。利用AOP可以对业务逻辑的各个部分进行隔离,从而使得业务逻辑各部分之间的[耦合度]降低,提高程序的可重用性,同时提高了开发的效率。
这贴一段百科对AOP的简介
下面给一个简单的例子,我们可以对函数执行过程进行
const log = () => { return (target: any, propertyKey: string, descriptor: PropertyDescriptor) => { const oldFn = descriptor.value descriptor.value = function (...args:any[]) { console.log('在函数执行前'); const res = oldFn.apply(this, args); console.log('在函数执行后', res); return res; } }; } class A { @log() say() { return 'Hello world' } } new A().say()
执行结果如下
[LOG]: "在函数执行前"
* * *
[LOG]: "在函数执行后", "Hello world"
运行结果如下,可以看到下面的数据和上方使用mysql客户端查出来结果一致
The solution is: [{"name":"jym","age":"1"},{"name":"jym2","age":"2"},{"name":"jym3","age":"3"},{"name":"jym4","age":"4"}]
通过mysql2这个包,我们就可以用node.js连接数据库了,可以使用一些基础的API来直接操作mysql数据库;比如上面的代码中就执行了'SELECT * FROM user'这个sql语句
除了使用这种基础库之外,我们还可以使用ORM(对象关系映射器)框架来连接数据库,直接用OOP的方式来编写模型和方法,ORM框架会帮助你生成对应的sql语句,这样就可以把关注点放在业务上面,而不用编写SQL语句。这可以让你的代码更加简洁和可维护
目前在nodejs中常用的ORM有prisma,sequlize,typeorm等等,下回我们就来尝试一下如何用ORM来连接数据库
加载全部内容