nestjs装饰器聚合,让你的代码更加灵活,复用

简介: nestjs装饰器聚合,让你的代码更加灵活,复用

什么是装饰器聚合

在 Nest.js 中,装饰器聚合(Decorator composition)是一种技术,通过将多个装饰器组合在一起形成一个装饰器链,以便在一个项(类、方法或参数)上应用多个装饰器的功能。装饰器聚合可以使代码更模块化、可复用,并且提高了装饰器的灵活性。


通过装饰器聚合,可以按照一定的顺序应用多个装饰器,每个装饰器都可以在不影响其他装饰器功能的情况下添加、修改或扩展特定项的行为。


装饰器聚合有什么用

复用性: 通过装饰器聚合,你可以将不同的装饰器组合在一起,形成一个可重复使用的装饰器链。这样,你可以定义一系列通用的装饰器,并在需要时根据需求组合它们。


模块化: 装饰器聚合使得装饰器可以更细粒度地应用于不同的部分。通过将多个装饰器应用于一个项,你可以将不同的关注点和功能分离。每个装饰器可以专注于一个特定的任务,从而提高代码的可读性和可维护性。


灵活性: 装饰器聚合允许你按照一定的顺序应用装饰器,以满足特定的需求。你可以定义不同的装饰器链,每个链上的装饰器顺序不同,可以根据需求轻松定制项的行为。


扩展性: 装饰器聚合允许你轻松地扩展已经存在的装饰器功能。如果你想要对一个项的行为进行修改或添加额外功能,只需在聚合装饰器链中添加新的装饰器即可,而不需要修改已有的装饰器。


项目中使用

在昨天的Guard案例中,我们拿身份校验这个例子来说,目前我们控制器身上已经绑定了3个装饰器,这个路由装饰器可以先不看,接下来,我们再为其绑定个管道


image.png


这个是一个将密码转化为number类型的管道,管道具体用法请看我之前写的管道验证那篇

image.png

至此我们的这个上传的路由身上已经绑定了好几个装饰器了,看着是不是很冗余

image.png

通过命令行创建一个装饰器


nest g d roleAuth
import { UseGuards, UsePipes, applyDecorators } from '@nestjs/common';
import { AuthGuard } from '../auth/auth.guard';
import { Role } from '../role/role.decorator';
import { MengPipe } from '../meng/meng.pipe';
export const RoleAuth = (...args: string[]) => {
    return applyDecorators(
        Role(...args),
        UseGuards(AuthGuard),
        UsePipes(MengPipe)
    )
}

接着通过关键的applyDecorators方法,将这些装饰器聚合在一起,要注意一点,因为Guard(守卫)的权限比pipe管道,拦截器等要高,所以这俩的顺序,调了也无效,在其他场景中可能对于不同的顺序,产生的效果也不一样,这个跟实际需求相关了


回到controller,为其绑定上我们聚合后的装饰器,相对于刚刚那一大堆,是不是简化了许多,这样也符合模块化,我们将实现特定功能的不同类聚合在一起最后统一导出,封装成一个一个的模块,另外对于这个管道如果我们要做dto验证,可能不止这一个地方应用了,在其他模块中也使用了,我们又可以结合其他类的功能将其封装成其他装饰器这样也达到了复用效果


image.png


总结

装饰器聚合为 Nest.js 应用提供了更强大、更灵活的装饰器功能。通过合理地组织和组合装饰器,可以提高代码的可读性、可维护性,并使系统更加模块化和可定制。


使用的时候要注意一点:包中的装饰器不可组合,无法与函数正常工作!!!

相关文章
|
6月前
|
开发者 Python
Python中的装饰器:提升代码灵活性与复用性
在Python编程中,装饰器是一种强大的工具,它可以在不修改原有代码的情况下,为函数或方法添加新的功能。本文将介绍Python中装饰器的基本概念和用法,以及如何利用装饰器提升代码的灵活性与复用性。
|
4天前
|
前端开发 JavaScript API
探究 React Hooks:如何利用全新 API 优化组件逻辑复用与状态管理
本文深入探讨React Hooks的使用方法,通过全新API优化组件逻辑复用和状态管理,提升开发效率和代码可维护性。
|
3月前
|
设计模式 存储 前端开发
React开发设计模式及原则概念问题之自定义Hooks的作用是什么,自定义Hooks设计时要遵循什么原则呢
React开发设计模式及原则概念问题之自定义Hooks的作用是什么,自定义Hooks设计时要遵循什么原则呢
|
5月前
|
数据安全/隐私保护 Python
Python装饰器是高阶函数,用于在不修改代码的情况下扩展或修改函数行为。它们提供可重用性、模块化和无侵入性的功能增强。
【6月更文挑战第20天】Python装饰器是高阶函数,用于在不修改代码的情况下扩展或修改函数行为。它们提供可重用性、模块化和无侵入性的功能增强。例如,`@simple_decorator` 包装`my_function`,在调用前后添加额外操作。装饰器还能接受参数,如`@logged("INFO", "msg")`,允许动态定制功能。
45 6
|
6月前
|
缓存 测试技术 开发者
Python中的装饰器:提升函数的灵活性和复用性
在Python编程中,装饰器是一种强大的工具,它可以让我们在不改变原有代码的情况下,对函数进行增强或者修改。本文将介绍Python中装饰器的基本概念,以及如何利用装饰器来提升函数的灵活性和复用性。
|
6月前
|
前端开发 BI API
API函数式组件封装逻辑
API函数式组件封装逻辑
40 0
|
6月前
模块功能复用和扩展性
模块功能复用和扩展性 模块功能复用和扩展性是软件工程中的重要概念,主要体现在设计和实现阶段。
93 1
75 # koa 基本逻辑实现以及属性的扩展
75 # koa 基本逻辑实现以及属性的扩展
29 0
|
JavaScript 前端开发 Java
ts装饰器-元编程技巧:如何利用装饰器特性开发框架?
ts装饰器-元编程技巧:如何利用装饰器特性开发框架?
|
安全 中间件 开发者
【Django学习笔记 - 9】:装饰器在类视图中的使用、中间件(开发中间件)、知识点小补充(子应用的集中管理)
【Django学习笔记 - 9】:装饰器在类视图中的使用、中间件(开发中间件)、知识点小补充(子应用的集中管理)
388 5
【Django学习笔记 - 9】:装饰器在类视图中的使用、中间件(开发中间件)、知识点小补充(子应用的集中管理)