带有派生数据的清洁体系结构CQR
CQR,使用干净的体系结构,多个数据库和最终的一致性
?详细信息
我还将更多详细信息保留在我的博客中
-
CQRS翻译成干净的体系结构
- CQRS深入命令
- CQRS查询和实现
- CQRS共识和一致性
- CQRS分布式混乱,盖定理
?我如何使用它?
您将需要以下工具:
- Docker
- Visual Studio 2019+或Visual Studio代码
- .NET 6
从 /src文件夹中执行您喜欢的命令行
$ cd src $ docker compose build $ docker compose up
打开您的浏览器并打到URL以查看OpenAPI
http:// localhost:5000/swagger/index.html
如果您无法运行,则可以按健康检查,以查看组件是否下降。
http:// localhost:5000/HealthCheck
如果您仍然遇到问题,请不要像分离一样运行,并在执行Docker命令后查看控制台上的错误。
干净的体系结构
这是此微服务模板的基本体系结构:
- 尊重政策规则,依赖性总是指向内向
- 将技术细节与系统的其余部分分开
- 坚硬的
- 每一层的单一责任
✂️CQRS
命令和查询之间的分离,具有孤立的数据库和不同的模型
命令堆栈
可以直接访问业务规则,并且仅负责仅在应用程序中写作。
在下面,您可以在命令堆栈中找到组件之间的基本交互:
⬆️查询堆栈
负责向您的应用程序的消费者提供数据,其中包含一个简化,更合适的读取模型,具有计算的数据,汇总值和实体结构。
该图像包含查询堆栈中组件之间的基本交互:
DDD
此示例包含一个简化的域模型,其中包含实体,汇总根,值对象和事件,这对于将写作与阅读数据库同步至关重要。
✔️TDD
该项目包含一个定义明确的IOC结构,除技术依赖性外,还可以单位测试该服务模板的几乎每个部分。
在主层内部,您将找到对应用程序必不可少的接口,但是将它们的实现在自己的层中,是什么允许使用测试双打嘲笑,固执。
有一个简单的示例使用母体对象图案和构建器来简化单元测试并保持其可维护和清洁。
数据密集型微服务
此微服务模板随附SRP和SOC。鉴于CQRS的本质,您可以轻松地将此应用程序分开调整每个堆栈。
?得出数据
拥有多个数据存储使该系统成为派生的数据系统,这意味着您永远不会丢失数据,例如,您总是可以从另一个商店重建一个商店,例如,如果您丢失了在写入和读取数据库之间同步数据的事件,则可以始终从写入数据库中恢复此数据并重建读取存储。
域模型使用视图材料器来查询模型。将其作为查询堆栈中分离的组件保持完全控制,以完全控制映射属性并进行全面测试。
✉️消息经纪
考虑到数据存储的物理隔离,命令堆栈和查询堆栈必须通信以同步数据。这是在此处使用消息经纪人完成的。
每个成功处理的命令都会创建一个事件,该事件已发表在消息经纪人中。同步背景过程订阅了这些事件,并负责更新阅读数据库。
?最终的一致性
一切都带有一些交易折扣。具有多个数据库的CQR的情况,为了维持高可用性和可扩展性,我们在数据库之间创建了不一致之处。
更具体地说,在两个数据库之间复制数据会产生最终的一致性,在特定的时刻,鉴于复制滞后滞后,尽管它们是临时的,但最终可以自我解决。
?参考
这是用于使该项目栩栩如生的可靠信息列表。
-
设计密集型应用程序
-
干净的建筑,罗伯特·马丁
-
云应用程序体系结构指南
-
Microsoft .NET-企业的架构应用程序,第二版
