Мой коллега и я находимся в тупике в дискуссии, и мы будем благодарны за участие других.
Мы используем шаблон локатора служб и общий интерфейс, чтобы абстрагировать весь наш доступ к данным, чтобы мы могли легко переключаться между различными источниками данных при изменении наших потребностей. Наш телефонный код не указывает, где хранятся данные и как. Он просто обращается к данным через службу, которую они подают из реестра службы.
Проблема, которую мы обсуждаем, возникает, когда у нас есть поля DateTime для объекта и сохраняем его в источнике данных MongoDB.
Что я заметил, так это то, что когда у нас есть объект в C # с DateTime, он отображается как правильное время. Когда мы заходим на наш сервер MongoDB с MongoVUE для проверки объекта, он показывает правильное время. Но когда мы получаем объект, DateTime теперь находится в UTC. Это, очевидно, создает проблемы при сравнении DateTime в памяти с датой в объекте, который был извлечен из источника данных MongoDB.
Я понимаю, что Mongo хранит DateTime внутри себя как время UTC. Я даже понимаю, почему он может возвращать UTC, когда вы звоните.
Вот где начинаются дебаты.
Предполагается, что это просто косметическая проблема и проблема только при отображении дат. Таким образом, мы должны просто вызвать .ToLocalTime на уровне интерфейса. Я не согласен и утверждаю, что это опасно нарушает уровни абстракции, которые мы создали при реализации шаблона локатора служб. Это также поднимает вопросы, касающиеся взаимодействия с этими датами, так как оно относится к запуску других событий.
То, что я прочитал еще, где мы должны хранить наше время в виде строки, в частности, в качестве некоторого стандарта формата UTC. Таким образом, интерфейсный слой не знает и не заботится о том, как хранится DateTime, и не делает наш объект, так как каждый источник данных будет хранить эту строку одинаково.
Мне удалось сделать это с использованием формата ISO 1806, но мой коллега считает, что это «хакерское» исправление и что использование .toLocalTime является подходящим способом справиться с этой ситуацией.
Мне интересно, что другие скажут по теме.
Заранее благодарим вас за ваш вклад.