我们目前无法从旧版数据库迁移,因此我们将其置于存储库之后并处理域部分。相同的DB将用于读取和写入部分,我们也不使用事件源。
我的困境是如果当前数据无效,因为它没有首先通过域逻辑?因此,我们有可能使用ReadModels
向客户端发送不一致的数据,这在我们的案例中是不可接受的。一些想法:
答案 0 :(得分:0)
我的困境是如果当前数据无效,因为它没有首先通过域逻辑?
好消息:这里的答案并不取决于您是使用遗留数据库,简单的CQRS方法还是全金属事件采购。
为ReadModels添加一些验证? (会导致代码重复)。
这是正确的答案。
我认为你发现的重复是一种错觉。
主要思想:首先,不共享不一致数据的决定是读取模型的本地决策。您的代码应该以这样的方式编写,即您可以在读取模型中更改该决策,而不会以任何方式影响写入模型。
Parnas的On the Criteria to be Used in Decoupling Systems into Modules是一个很好的起点。
第二:读模型和写模型共同具有 state 的概念。这是存储在数据库中的内容,在模型中表示为值。读模型和写模型没有理由不共享用于验证状态的实现。