我正在学习 DDD 和 Hexagonal 架构,我想我已经掌握了基础知识。但是,我不确定如何解决一件事:我如何向用户显示数据?
因此,例如,我有一个简单的域,其中包含一个具有某些功能的 Worker 实体(某些方法会导致实体发生更改)和一个 WorkerRepository,以便我可以持久化 Worker。我得到了一个应用层,其中包含一些命令和命令总线来操作域(例如创建 Worker 并更新他们的工作时间,持久化更改),以及一个具有 WorkerRepository 和 GUI 应用程序实现的基础设施层。
在这个应用程序中,我想向所有工作人员展示他们的一些数据,并准备修改它们。如何显示数据?
- 我可以给它一个 WorkerRepository 的实现的参考。我认为这不是一个好的解决方案,因为这样我可以在存储库中插入新的工人而跳过命令总线。我希望所有更改都通过命令总线。
- 好的,我将 WorkerRepository 拆分为 WorkerQueryRepository 和 WorkerCommandRepository(根据 CQRS),并且只提供对 WorkerQueryRepository 的引用。这仍然不是一个好的解决方案,因为 repo 会返回具有更改它们的方法的 Worker 实体,这些更改将如何持久化?
- 我应该创建两种类型的存储库吗?一种用于域和应用层,另一种仅用于向外界提供数据。第二个不会返回成熟的 Worker 实体,只有 WorkerDTO 只包含 GUI 需要的数据。这样,GUI 就没有其他方法可以改变 Workers,只能通过命令总线。
第三种方法是正确的方法吗?还是我错误地强迫更改必须通过命令总线?