NestJS DDD CLI:轻松构建域驱动设计项目的脚手架

 安装

要在 NestJS 项目中安装用于为您的域生成文件夹和文件结构的应用程序,您可以使用 @webmogilevtsev/nestjs-ddd-cli 包。您可以使用以下命令安装它:

npm install @webmogilevtsev/nestjs-ddd-cli --save-dev

安装包后,您需要将脚本添加到 package.json 文件中才能运行generate:domain 命令。将以下行添加到 "scripts" 部分:

"scripts": {
  ...
  "generate:domain": "ddd-cli domain --",
  "generate:command": "ddd-cli command",
  "generate:query": "ddd-cli query",
  "generate:event": "ddd-cli event"
}

  全局安装

您还可以全局安装 @webmogilevtsev/nestjs-ddd-cli 以在任何 NestJS 项目中使用生成域命令。为此,请运行以下命令:

npm install -g @webmogilevtsev/nestjs-ddd-cli

全局安装后,您可以从计算机上的任何目录运行generate-domain命令:

generate-domain my-name

  描述

这是一个用于为 NestJS 项目中的域生成文件夹和文件结构的应用程序。 generate:domain 命令生成新域的文件夹和文件结构,包括以下目录:

  • libs/domains/src/${name}-domain/application-services/commands
  • libs/domains/src/${name}-domain/application-services/dto
  • libs/domains/src/${name}-domain/application-services/events
  • libs/domains/src/${name}-domain/application-services/facade
  • libs/domains/src/${name}-domain/application-services/queries
  • libs/domains/src/${name}-domain/domain/services
  • libs/domains/src/${name}-domain/domain/repositories
  • libs/domains/src/${name}-domain/domain/sagas
  • libs/domains/src/${name}-domain/domain
  • src/infrastructure/${name}-adapter/${name}-adapter.service
  • src/infrastructure/infrastructure-module

 命令

 生成:域

 域生成

 选项:

#  选项名称  简称  类型  必需的  例子  描述
1)   - 姓名 -n  细绳  是的
--name=我的名字 -n 我的名字  设置域名
2)   - 格式 -f  布尔值  不  --格式=真 -F
使用 prettier 和 eslint 执行格式化

要生成新域,请运行带有 name 参数的generate:domain 命令,该命令设置域名:

npm run generate:domain --name=my-name --format=true
# Shortened notation
npm run generate:domain my-name -f

  生成:命令

 命令生成

 选项:

#  选项名称  简称  类型  必需的  例子  描述
1)   - 姓名 -n  细绳  是的
--name=我的名字 -n 我的名字  设置命令名称
2)   - 领域 -d  细绳  是的
--domain=我的名字 -d 我的名字
指定要为其生成命令的域
3)   - 格式 -f  布尔值  不  --格式=真 -F
使用 prettier 和 eslint 执行格式化

要为域生成新命令,请使用名称、域和可选的 –format 参数运行generate:command 命令:

npm run generate:command --name=create-my-name -- --domain=my-name --format=true
# Shortened notation
npm run generate:command create-my-name -- -d my-name -f

  生成:查询

 查询生成

 选项:

#  选项名称  简称  类型  必需的  例子  描述
1)   - 姓名 -n  细绳  是的
--name=我的名字 -n 我的名字  设置查询名称
2)   - 领域 -d  细绳  是的
--domain=我的名字 -d 我的名字
指定要为其生成查询的域
3)   - 格式 -f  布尔值  不  --格式=真 -F
使用 prettier 和 eslint 执行格式化

要为域生成新查询,请使用名称、域和可选的 –format 参数运行generate:query 命令:

npm run generate:query --name=get-one-my-name -- --domain=my-name --format=true
# Shortened notation
npm run generate:query get-one-my-name -- -d my-name -f

  生成:事件

 事件生成

 选项:

#  选项名称  简称  类型  必需的  例子  描述
1)   - 姓名 -n  细绳  是的
--name=我的名字 -n 我的名字  设置事件名称
2)   - 领域 -d  细绳  是的
--domain=我的名字 -d 我的名字
指定要为其生成事件的域
3)   - 格式 -f  布尔值  不  --格式=真 -F
使用 prettier 和 eslint 执行格式化

要为域生成新事件,请使用名称、域和可选的 –format 参数运行generate:event 命令:

npm run generate:event --name=my-name-created -- --domain=my-name --format=true
# Shortened notation
npm run generate:event my-name-created -- -d my-name -f

  目录结构

generate:domain 命令创建的文件夹和文件结构如下所示:

libs/
  domains/
    src/
      example-domain/
        application-services/
          commands/
            index.ts
          dto/
            index.ts
          events/
            index.ts
          facade/
            example-facade.factory.ts
            example-facade.service.ts
          queries/
            index.ts
        domain/
          services/
            example-domain.service.ts
          example-domain.interface.ts
          example-domain.aggregate.ts
          index.ts
        repositories/
          example-domain-repository.abstract.ts
          index.ts
        sagas/
          example-domain-saga.service.ts
        example-domain.module.ts
        index.ts
    index.ts
src/
  infrastructure/
    example-adapter/
      example-adapter.service
    infrastructure-module.ts
  • application-services/commands/ - 包含用于管理域的命令的目录。
  • application-services/dto/ - 包含应用程序中使用的数据传输对象的目录。
  • application-services/events/ - 包含域发出的事件的目录。
  • application-services/facade/ - 包含外观类的目录,提供与域交互的简单接口。
  • application-services/queries/ - 包含用于从域检索数据的查询的目录。
  • domain/services/ - 包含实现业务逻辑的域服务的目录。
  • domain/repositories/ - 包含提供数据访问权限的域存储库的目录。
  • domain/sagas/ - 包含协调域组件之间复杂工作流程的传奇的目录。
  • domain/ - 包含域接口以及聚合和其他组件的目录。
  • example-domain.module.ts - 组合所有域组件的模块。
  • index.ts - 从 src/ 文件夹导出所有域的文件。
  • infrastructure/ - 实现层

 下载详情:

添加一名作者

源代码:https://github.com/mogilevtsevdmitry/nestjs-ddd-cli