architecture - 如何在 DDD 中实现仅查询子
问题描述
在过去的几个月里,我们正在尝试基于 DDD 和 Hexagonal-architecture 重构和改进后端服务的架构和风格。不幸的是,我们对 DDD 及其最佳实践还很陌生。
我们的产品是关于车队管理和监控的。我们拥有的一项功能是用户可以获得他们管理的车辆的报告。这些报告大多是对数据库的简单查询,在应用层有一些聚合和域逻辑。这就是我们的问题。对于大多数应用程序,我们使用 CQRS 并在我们的应用程序层中定义了命令/查询处理程序。我们注入到此处理程序的依赖项以及我们的数据库和缓存使用存储库等进行抽象。
但是对于报告功能(我不知道是否适合将其称为子域),我们不知道该做什么以及如何设计实体。其中一些报告很复杂,涉及在为 db 获取的多个数据集上加入、验证等,其他一些是非常简单的查询,将它们全部压缩到查询处理程序中似乎不合适,我们不知道我们是否需要在这里聚合或不是。因此,我们不再陷入困境和困惑。
解决方案
TL;DR:如果你不尝试应用 DDD 模式,你会怎么做?去做。
报告通常是只读的。它们只是形式方便的信息副本。
这意味着您不需要“为了数据更改而将其视为一个单元的关联对象集群”(聚合),因为我们没有更改数据。您不需要存储库和工厂,因为您没有管理聚合生命周期。你不需要实体,因为你不需要改变信息的规则。
“值对象”有时很有用,但是将信息复制到一个值中以便您可以再次读取它是浪费时间。
(例外情况可能类似于独立应用程序,您的报告是对当前存储在内存聚合中的信息的描述。)
推荐阅读
- javascript - 如何在 iOS 设备上选择图像期间保持 socket.io 连接处于活动状态
- scala - 如何使用类型参数扩展案例类?
- javascript - 获取div的id
- keycloak - Keycloak - how to implement delegated administration
- c++ - When looping through all processes, the process name stays the same but the process ID changes
- android - 如何使 TextView 在具有更高屏幕比例的设备上响应?
- php - How to separate html for header/footer?
- python - Scipy.Optimize.Curve_Fit Not Fitting Cos^2 Well
- typescript - haskell 等效于 typescript 映射函数
- reactjs - How to show the article details , i m facing problem