我和我的同事在辩论中陷入僵局,非常感谢其他人的意见。
我们利用服务定位器模式和通用接口来抽象我们所有的数据访问,以便我们可以随着需求的变化在不同的数据源之间轻松交换。我们的调用代码没有指示数据存储在哪里或如何存储。它只是通过从服务注册表提供的服务访问数据。
当我们在对象上有 DateTime 字段并将其存储到 MongoDB 数据源时,就会出现我们正在辩论的问题。
我注意到的是,当我们在 C# 中有一个带有 DateTime 的对象时,它会显示为正确的时间。当我们使用 MongoVUE 登录到 MongoDB 服务器以检查对象时,它会显示正确的时间。但是当我们检索对象时,DateTime 现在是 UTC。当将内存中的 DateTime 与从 MongoDB 数据源检索的对象中的 DateTime 进行比较时,这显然会产生问题。
我了解 Mongo 在内部将 DateTime 存储为 UTC 时间。我什至理解为什么当你调用它时它可能会返回 UTC。
这是辩论开始的地方。
有人建议这只是一个外观问题,仅在显示日期时出现问题。因此,我们应该在接口层中简单地调用 .ToLocalTime。我不同意并断言这危险地破坏了我们在实现服务定位器模式时创建的抽象层。它还提出了有关与这些日期时间的交互的问题,因为它与触发其他事件有关。
我在其他地方读到的内容是我们应该将我们的时间存储为字符串,特别是作为 UTC 格式的某种标准。以这种方式,接口层不知道也不关心 DateTime 是如何存储的,我们的对象也不知道,因为每个数据源都会以相同的方式存储该字符串。
我使用 ISO 1806 格式成功地做到了这一点,但我的同事认为这是一个“hacky”修复,使用 .toLocalTime 是处理这种情况的适当方法。
我对其他人对这个话题的看法很感兴趣。
预先感谢您的意见。