考虑一个函数:IsWalletValid(walletID)。如果walletID存在于数据库中,则返回true,并更新“last_accessed_time”字段。
定期运行任务以删除在一段时间内未访问过的任何钱包。
似乎是我们想要做的简单解决方案,但IsWalletValid()有副作用,因为它写入数据库。
我们应该添加额外的“UpdateLastAccessedTime(walletID)”功能吗?每当我们调用IsWalletValid()时,我们还需要记住调用UpdateLastAccessedTime(walletID)。
答案 0 :(得分:0)
验证钱包是否有效并更新它的last_accessed_time
字段需要在事务上保持一致(ACID)吗?您可以在此处使用最终一致性:
方法IsWalletValid
发布WalletAccessed
事件,然后事件处理程序异步更新last_accessed_time
。
答案 1 :(得分:0)
如果域逻辑没有访问last_accessed_time
来对任何写入处理做出决定,这可能只是只读投影的一个方面。这似乎与其他更详细的阅读审计问题一样令人担忧。仅仅因为正在编写和维护数据并不意味着它必然需要成为系统写入模型的一部分。但是,如果您希望将其作为域的一部分实现,并且可能存储在同一事件存储库中,则可以将其视为在被审计的原始聚合边界之外的单独审计上下文。