Лучший способ изменить дату и время.теперь во всех местах

#c#

#c#

Вопрос:

У меня есть требование, чтобы везде, где у нас есть дата и время.Теперь проверьте, что это должно быть проверено с помощью смоделированной даты (из пользовательского интерфейса, доступного только в тестовых средах), как мне следует разработать эту функциональность с минимальными изменениями. Возможно ли переопределить дату и время.Теперь функциональность и везде, где DateTime.Теперь используется, он будет считывать переопределенное значение.

Любая помощь по этому вопросу будет высоко оценена.

Спасибо

Ответ №1:

В принципе, прекратите использовать DateTime.Now напрямую. Вместо этого введите абстракцию часов (я обычно называю это IClock ), которая имеет единственную операцию «получить текущую дату и время» и внедряет ее везде, как и любую другую зависимость.

Затем вы можете использовать простую реализацию, которая делегирует DateTime.Now (или лучше DateTime.UtcNow , я бы посоветовал) для производства, и поддельную реализацию для тестирования.

Это подход, который мы настоятельно рекомендуем в моей библиотеке NodaTime, где мы предоставляем вам интерфейс и производственные / поддельные реализации.

Ответ №2:

Вы не должны стремиться разработать эту функциональность с минимальными изменениями. Вы должны все делать правильно. Все правильно — это иметь интерфейс «Clock» (или «IClock» на языке dot net) и передавать его (вводить его, размещать его в сервисе, вручную распространять, что бы это ни стоило) в каждое место, которое в нем нуждается. Сделайте это правильно или сделайте это дважды.

Ответ №3:

Возможно ли переопределить DateTime.Now функциональность

Нет. DateTime.Now это статическое свойство — нет способа переопределить или изменить его поведение. Лучшее, на что вы можете надеяться, это каким-то образом изменить системные часы, чтобы они соответствовали введенной дате / времени (что может иметь другие нежелательные последствия).

Один из вариантов — выполнить поиск / замену вручную, чтобы перенести дату и время.Теперь вызывает интерфейс, который можно подделать. Вы также можете просмотреть инструменты анализа рекламного кода, чтобы определить будущие варианты использования.