使用TypeScript和NestJS的领域驱动设计(DDD)、六边形架构(Hexagonal)、CQRS、事件源(ES)、事件驱动架构(EDA)、行为驱动开发(BDD)的完整工作实例。
这个开源项目使用了必要的软件架构和设计模式,如 DDD、六边形架构、CQRS 和最终一致性,使其适合更大的团队在项目上同时工作。它使您可以专注于业务逻辑。
我们在 TypeScript / NodeJS 中创建了它,使用 NestJS 构建并使用其他开源技术(如 gRPC、MongoDB、PostegreSQL、NATS、Grafana、Prometheus 和 Jaeger)来提供健壮、有弹性、可扩展和可维护的应用程序。
通过这个示例,您可以根据您的需要调整业务逻辑代码,并立即拥有一个生产就绪的应用程序。
该项目包括一个过度设计的 ToDo 应用程序,其中包含如果您希望代码易于更改、有弹性且易于维护所必需的模式和原则。下面我们提供有关如何运行它的详细说明
此外,您还将学到很多关于软件设计和架构模式及原则的知识,例如:
- 六边形架构(或端口和适配器)
- 领域驱动设计 (DDD) 及其战术模式
- 行为驱动开发 (BDD)
- 事件驱动架构 (EDA)
- 命令和查询责任分离 (CQRS)
- 最终一致性
- 事件风暴
todo 应用程序,基本上是一个简单的 todo 应用程序,有一些调整。
用户应该能够注册到待办事项应用程序。注册后,他们应该能够登录。登录后,他们应该能够添加待办事项、完成待办事项、取消完成待办事项(以防他们不小心完成),以及修改待办事项标题。在整个过程中,他们应该能够查看他的待办事项。
当一个待办事项完成时,如果这是第一个完成的待办事项,则应向用户发送一封电子邮件,祝贺他完成了他的第一个待办事项。此操作主要与需求营销团队有关。
下面列出了一些用于实施该项目的具体技术:
- 身份验证:JSON Web 令牌 - JWT
- 数据库 - 持久性:MongoDB,PostgeSQL
- 测试:JEST
- 外部通信协议:REST、gRPC
- 框架:NestJS
- PubSub 技术:NATS
- 消息流技术:NATS 的JetStream
- 容器技术:Docker
- 跟踪可观察性:Jaeger,Grafana
- 指标:Prometheus
- API 网关 - 代理:Envoy
设计流程——事件风暴
我们选择了事件风暴技术来记录待办事项应用程序的功能和业务逻辑。
一般来说,事件风暴是一种协作建模技术,用于对复杂领域进行建模,以使生成的软件与实际业务逻辑保持一致。它与领域驱动设计 (DDD)以及事件驱动架构 (EDA)完美匹配。
我们已经确定了以下限界上下文(其实应该是子域):
在此过程中,我们进一步将一些有界上下文(语言边界)拆分为更细粒度的模块。
发现的系统流程如下(每个流程应该是一个BC):
- 用户登录流程(IAM 限界上下文)
- 用户注册流程(IAM Bounded Context)
- Todo流程(Todo限界上下文)
- 入职流程(营销限界上下文)
详细点击标题