Я предполагаю, что именно ваш модельный слой знает о часовом поясе пользователя, поэтому преобразование временных свойств зависит от уровня модели. В противном случае вам нужно будет сообщить на уровне представления о часовом поясе и преобразовать каждое значение времени там.
Преобразование значений времени на уровне модели позволило бы использовать их на уровне представления без каких-либо преобразований, поэтому я думаю, что это будет чисто. Например, вы можете инициализировать ваши объекты (POCO) с преобразованным временем в начале. Но остерегайтесь повторного преобразования их в модель, забывая, что они уже инициализированы по местному времени. Кроме того, если пользователь может редактировать значения времени, вам потребуется преобразовать их обратно в время UTC перед сохранением.
Обновление:
Подумав еще немного, я понял, что время UTC является частью модели, а местное время является представлением этой модели, поэтому обязанность преобразования больше относится к уровню представления (за счет несогласия с собой). При одном и том же мыслительном процессе наличие свойств локального времени вместе с временем UTC по сути является дублированием, и преобразование все еще находится на уровне модели. Чтобы преодолеть это, у вас может быть свойство readonly UTCToLocalTimeConverter
-type в пользовательском POCO, которое инициализируется с часовым поясом (что также устраняет необходимость в статических методах). Тогда все вызовы временных свойств на страницах будут обернуты в метод ConvertToLocalTime
конвертера, который доступен через пользователя. Вы также можете поместить экземпляр конвертера непосредственно в Session
, если хотите.
Я не знаю, сработает ли этот подход для вас, но он вдохновлен вашей стратегией, и я думаю, что остальная часть дизайна работает более плавно, думая таким образом. Также преобразование в местное время все еще в распоряжении клиента. Недостатком является необходимость преобразования всех значений времени в клиенте, но это кажется мне необходимым злом в обмен на избавление от дублирования данных и статических методов.