首页 > 其他分享 >比nestjs更优雅的ioc:跨模块访问资源

比nestjs更优雅的ioc:跨模块访问资源

时间:2024-04-10 22:57:12浏览次数:20  
标签:const test nestjs 模块 scopeHome home ioc user

使用ts的最佳境界:化类型于无形

在项目中使用ts可以带来类型智能提示与校验的诸多好处。同时,为了减少类型标注,达到化类型于无形的效果,CabloyJS引入了ioc和依赖查找的机制。在上一篇文章中,我们创建了一个业务模块test-home,并且采用依赖查找的机制演示了如何优雅的定义和使用资源,包括:Service服务、Config配置、国际化语言资源、Error错误异常

在实际的项目当中,经常会遇到跨模块访问资源的场景,那么,CabloyJS的依赖查找机制是否仍然可以优雅的实现跨模块访问呢?让我们一睹为快

模块化体系与任务说明

CabloyJS全栈框架的前后端均采用模块化体系。一个CabloyJS项目由多个业务模块组成,每个业务模块都可以包含与自身业务相关的资源,比如:Service服务、Config配置、国际化语言资源、Error错误异常、中间件、定时任务、消息队列、系统启动项,等等

在这里,我们创建一个新的业务模块test-work,在test-work中访问test-home提供的资源

1. 新建业务模块

cabloy api:create:module test-work

2. 新建API

通过一个命令同时创建一组文件:Route、Controller、Service

cabloy api:create:controller work

3. 跨模块访问Service服务

接下来,我们在刚才新建的Service当中,访问模块test-home的Service服务

import { BeanBase, Local } from '@cabloy/core';
import { ScopeModule } from '../resource/this.js';

@Local()
export class LocalWork extends BeanBase<ScopeModule> {
  async action({ user }) {
+   const scopeHome = this.getScope('test-home');
+   return scopeHome.local.home.action({ user });
    // return user;
  }
}
  1. 通过getScope方法获取模块test-home的scope对象
  2. 通过scope对象直接访问Service服务: home

看一下动画演示,提供了完整的类型智能提示:

4. 跨模块访问Config配置

访问模块test-home的Config配置

import { BeanBase, Local } from '@cabloy/core';
import { ScopeModule } from '../resource/this.js';

@Local()
export class LocalWork extends BeanBase<ScopeModule> {
  async action({ user }) {
    const scopeHome = this.getScope('test-home');
+   const prompt = scopeHome.config.prompt;
    return scopeHome.local.home.action({ user });
    // return user;
  }
}
  1. 直接通过scopeHome取得config中的prompt属性值

看一下动画演示,提供了完整的类型智能提示:

5. 跨模块访问国际化语言资源

访问模块test-home的国际化语言资源

import { BeanBase, Local } from '@cabloy/core';
import { ScopeModule } from '../resource/this.js';

@Local()
export class LocalWork extends BeanBase<ScopeModule> {
  async action({ user }) {
    const scopeHome = this.getScope('test-home');
+   const message = scopeHome.locale.HelloWorld();
+   const message1 = scopeHome.locale.HelloWorld.locale('en-us');
+   const message2 = scopeHome.locale.HelloWorld.locale('zh-cn');
    return scopeHome.local.home.action({ user });
    // return user;
  }
}

看一下动画演示,提供了完整的类型智能提示:

6. 跨模块访问Error错误异常

抛出模块test-home提供的Error错误异常

import { BeanBase, Local } from '@cabloy/core';
import { ScopeModule } from '../resource/this.js';

@Local()
export class LocalWork extends BeanBase<ScopeModule> {
  async action({ user }) {
    const scopeHome = this.getScope('test-home');
+   scopeHome.error.Error001.throw();
    return scopeHome.local.home.action({ user });
    // return user;
  }
}
  1. 直接通过scopeHome抛出错误异常Error001

看一下动画演示,提供了完整的类型智能提示:

后记

CabloyJS采用ioc和依赖查找的机制,让ts的使用达到了化类型于无形的最佳境界,从而让我们的代码保持优雅和简洁,进而也能显著提升开发效率,保证代码质量

欲了解更多,请关注每晚8点B站直播:濮水代码

标签:const,test,nestjs,模块,scopeHome,home,ioc,user
From: https://www.cnblogs.com/zhennann/p/18127722

相关文章

  • Python 模块化设计
             模块化设计是一种软件设计方法,它将程序分解成小的、独立的部分,这些部分称为模块。每个模块都有它的功能,并且设计成可以被其他模块重用。在Python中,模块化设计不仅有助于代码的组织和维护,还能提升代码复用性和开发效率。        1.定义模块在Pyth......
  • Spring Maven项目添加web模块
    问题描述:IDEA新建的maven项目没有web模块,如何新增web模块?操作步骤:1、选中对应的模块名称,右键单击“OpenModuleSettings” 2、如果模块下②web存在,则按照图一步骤顺序,依次选择“+”,在Type单击web.xml,path路径为默认路径,如果想要修改,可以单击步骤⑤修改,否则,执行步骤⑥和⑦......
  • 利用IIS的反向代理模块,实现类似镜像站的效果
    ......
  • 51单片机led灯模块
    1.151单片机led灯的点亮根据进制转换表,将二进制转换成16进制其中程序中的P2口,0x是表示后面是16进制的1.2led闪烁1.3 led流水灯#include<REGX52.H>voidDelay1ms(unsignedintxms)   //@12.000MHz{   unsignedchardatai,j;   while(xms)......
  • CTFshow-Web入门模块-爆破
    CTFshow-Web入门模块-爆破by故人叹、web21考察点:burpsuite使用、自定义迭代器使用题目提供了字典,要求登录并提示了爆破,使用burpsuite抓包并操作:(1)用户名一般为admin,密码随意输,抓包并发送给爆破模块。可以看到Basic后有一段base64编码,解码得到用户名:密码的格式,证明我们之......
  • 002nestjs控制器(controller)
    一、控制器的作用控制器负责处理传入请求并向客户端返回响应二、使用方法新建/cats目录创建cats.controller.ts在里面添加如下内容import{Controller,Get}from'@nestjs/common';@Controller('cats')exportclassCatsController{@Get()findAll():string{......
  • Python包和模块
    Python中的模块和包是用于组织代码的关键构造。它们可以帮助你将代码逻辑划分成可管理的部分,防止命名空间(namesspace)的冲突,并提供分享和重用代码的方式。一、模块模块是一个包含Python代码的文件。模块的名称就是文件的名称(不包含后缀.py)模块可以包含定义的函数,类,变量,也可......
  • Nginx模块安装配置
    Nginx模块安装配置一、查看nginx安装的模块要查看Nginx安装了哪些模块,可以使用Nginx的二进制文件运行nginx-V命令。这将输出Nginx版本和配置参数,包括编译时包含的模块。在命令行中运行以下命令:nginx-V查看输出中的--with-参数,这些参数后面通常会跟着模块名称,比如--w......
  • JavaScript 模块的循环加载
    "循环加载"(circulardependency)指的是,a脚本的执行依赖b脚本,而b脚本的执行又依赖a脚本。//a.jsvarb=require('b');//b.jsvara=require('a');通常,"循环加载"表示存在强耦合,如果处理不好,还可能导致递归加载,使得程序无法执行,因此应该避免出现。 但是实际上,这是很......
  • BOSHIDA DC电源模块的功率调节和保护功能介绍
    BOSHIDADC电源模块的功率调节和保护功能介绍DC电源模块是一种用于将交流电源转化为直流电源的装置。它通常用于工业自动化设备、通信设备、医疗设备、汽车电子等领域。DC电源模块具有功率调节和保护功能,这些功能对于保证电源的稳定性和安全性至关重要。 第一,功率调节功能是D......