插件配置设计

本文涉及的产品
Redis 开源版,标准版 2GB
推荐场景:
搭建游戏排行榜
云数据库 Tair(兼容Redis),内存型 2GB
简介: 插件配置设计

我们在系统中用过很多周边生态包,例如: nestjs-redis@nestjsx 系列等等,这些第三方包有一些需要传入配置,有一些仅仅是 import 后就好了,对于不需要传入配置的,当然做起来就容易了,需要传入配置的就需要设计如何传入配置了。 NestJS 官方并没有限制传参格式,仅仅简单描述了一下传参形式,还不全。。。因此需要我们自己来设计传参方案了。


操千曲而后晓声,观千剑而后识器。 设计肯定不是凭空而来的,也不是按照自己的想法随意设计只要能实现功能和需求就行,设计要有艺术感。这里选取两个比较流行的带有传参的第三方包来参考。分别是:nestjs-redis@nestjs/typeorm


设计需求

对于 NestJS 项目来说,传参配置需要两种形式,分别为同步异步


同步的意思是在模块注册的时候已经明确的知道了配置信息,异步的意思是在模块注册的时候并不知道明确的配置信息,需要动态计算出来。


参考

nestjs-redis

首先看一下 nestjs-redis 这个包,它提供同步和异步两种模式,同步的方式采用 register 命名,异步采用 forRootAsync 命名,如下所示:(摘自npm上说明文档)

  • register
import { Module } from '@nestjs/common'
import { RedisModule} from 'nestjs-redis'
@Module({
    imports: [
        RedisModule.register(options)
    ],
})
export class AppModule {}点击复制复制失败已复制


  • forRootAsync
import { Module } from '@nestjs/common';
import { RedisModule} from 'nestjs-redis'
@Module({
    imports: [
        RedisModule.forRootAsync({
            useFactory: (configService: ConfigService) => configService.get('redis'),         // or use async method
            //useFactory: async (configService: ConfigService) => configService.get('redis'),
            inject:[ConfigService]
        }),
    ],
})
export class AppModule {}点击复制复制失败已复制


@nestjs/typeorm

@nestjs/typeorm 这个包也提供同步和异步两种模式,同步采用 forRoot 命名,异步采用 forRootAsync 命名,关于这个包的配置规则直接参考 NestJS 官方文档中的数据库部分即可,文档地址


配置设计

经过这两个包的参考,最终选择采用 @nestjs/typeorm 的设计方案,毕竟官方出品,各方面都有保证。


提示

尽管这里面值列了两个包,但实际上不止看过这两个包,这里选取两个质量好的来展示。


最终,我选择同步配置时采用 forRoot 命名,异步采用 forRootAsync 命名。并且在异步时,支持 useExistinguseClassuseFactory 三种模式。


未完待续。。。

相关实践学习
基于Redis实现在线游戏积分排行榜
本场景将介绍如何基于Redis数据库实现在线游戏中的游戏玩家积分排行榜功能。
云数据库 Redis 版使用教程
云数据库Redis版是兼容Redis协议标准的、提供持久化的内存数据库服务,基于高可靠双机热备架构及可无缝扩展的集群架构,满足高读写性能场景及容量需弹性变配的业务需求。 产品详情:https://www.aliyun.com/product/kvstore     ------------------------------------------------------------------------- 阿里云数据库体验:数据库上云实战 开发者云会免费提供一台带自建MySQL的源数据库 ECS 实例和一台目标数据库 RDS实例。跟着指引,您可以一步步实现将ECS自建数据库迁移到目标数据库RDS。 点击下方链接,领取免费ECS&RDS资源,30分钟完成数据库上云实战!https://developer.aliyun.com/adc/scenario/51eefbd1894e42f6bb9acacadd3f9121?spm=a2c6h.13788135.J_3257954370.9.4ba85f24utseFl
目录
相关文章
|
5月前
|
存储 数据库 数据安全/隐私保护
Duplicator插件的主要功能是什么?
【6月更文挑战第4天】Duplicator插件的主要功能是什么?
57 1
|
6月前
|
开发者
Eslint插件使用配置, 规范化开发, 详细配置流程
Eslint插件使用配置, 规范化开发, 详细配置流程
|
6月前
|
IDE Java Maven
性能工具之Jmeter扩展配置元件插件
【5月更文挑战第20天】性能工具之Jmeter扩展配置元件插件
147 1
CTK框架 - 插件依赖关系 - 给插件加上界面
在第一篇文章中吗,我们提到了MANIFEST.MF中有个字段是依赖关系,这次我们来测试一下这个依赖关系:
189 0
|
人工智能 Java
IEDA超实用插件,开启这些功能,提高工作效率、提高code容错 ❤️【建议收藏】
IEDA超实用插件,开启这些功能,提高工作效率、提高code容错 ❤️【建议收藏】
IEDA超实用插件,开启这些功能,提高工作效率、提高code容错 ❤️【建议收藏】
|
IDE 程序员 编译器
VS2019正确创建C++步骤以及扩展插件美化你的VS2019的IDE开发环境
VS2019正确创建C++步骤以及扩展插件美化你的VS2019的IDE开发环境
VS2019正确创建C++步骤以及扩展插件美化你的VS2019的IDE开发环境
|
安全
QingScan 快速集成自定义工具
QingScan是一个漏洞扫描聚合平台,添加目标后30款工具自动调用;不少人也想自己添加工具进来,其实添加非常简单,我们已经帮你考虑好了,你不用写代码只需要在界面操作就可以完成。
169 0
QingScan 快速集成自定义工具
|
SQL 关系型数据库 MySQL
PgAUT插件的原理
在PostgreSQL中实现MySQL的on update current_timestamp功能
1551 0