NestJS DDD CLI:轻松构建域驱动设计项目的脚手架 -- 知识铺
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
- 原文作者:知识铺
- 原文链接:https://index.zshipu.com/geek001/post/20240627/NestJS-DDD-CLI-Scaffold-Domain-Driven-Design-Projects-with-Ease--%E7%9F%A5%E8%AF%86%E9%93%BA/
- 版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 4.0 国际许可协议进行许可,非商业转载请注明出处(作者,原文链接),商业转载请联系作者获得授权。
- 免责声明:本页面内容均来源于站内编辑发布,部分信息来源互联网,并不意味着本站赞同其观点或者证实其内容的真实性,如涉及版权等问题,请立即联系客服进行更改或删除,保证您的合法权益。转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。也可以邮件至 sblig@126.com