当前位置: 代码网 > it编程>编程语言>Javascript > Typescript装饰器AOP示例详解

Typescript装饰器AOP示例详解

2024年05月18日 Javascript 我要评论
在typescript中使用装饰器上文中讲了装饰模式,今天来来介绍一些typescript里面的装饰器,以及如何用装饰器来实现之前提及装饰模式,装饰器只是实现装饰模式的一种方式,并非唯一配置在type

在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"

以上就是typescript装饰器aop示例详解的详细内容,更多关于typescript装饰器aop的资料请关注代码网其它相关文章!

运行结果如下,可以看到下面的数据和上方使用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来连接数据库

以上就是node.js连接数据库实现过程详解的详细内容,更多关于node.js连接数据库的资料请关注代码网其它相关文章!

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com