我们假设我有一种情况,即在我持久化实体之前设置创建UTC日期时间。通常,我会这样做:
var something = new Something;
something.CreationDT = DateTime.UtcNow;
repo.Save(something);
确保始终发生这种情况的最佳方法是什么。我知道如何为测试目的创建一个DateTime包装器,但这对我来说没有必要帮助我,因为程序员仍然可以使用:
something.CreationDT = DateTime.Now;
是否有一种模式可以确保每个程序员都使用UTC?
答案 0 :(得分:2)
如果总是想要在对象上强制使用UTC日期,这是确切的代码,那么就把它作为构造函数的一部分来做,例如。
public Something()
{
CreatedDT = DateTime.UtcNow;
}
public DateTime CreatedDT { get; private set; }
...
Save(new Something());
显然,这不适合您在应用程序中先前创建对象并在以后保留的情况,但是,这似乎不是这种情况。
我肯定会避免允许用户在内部返回Now
时设置UtcNow
,这只会让人感到困惑。如果使用UtcNow
更好,因为它对开发人员来说更具可读性 - 很明显,的值是UTC。
对于这种事情,我通常会尝试让数据库做尽可能多的工作,所以我将默认值设置为当前的UTC日期/时间,所以我不需要担心从我的发送它客户端。