申请时间的设计模式?

Lar*_*sen 6 c# testing design-patterns

如果构建业务流程取决于它的时间[1]的系统,则不能DateTime.Now在代码中使用或类似,因为您必须处理测试,例如,未来的月末或年终场景.使用SSL证书时通常不能更改操作系统时间,因为对分布式系统执行更正是很复杂的.

一种选择是创建一个单一服务,该服务可由返回当前时间的所有系统访问.在生产中它可以返回DateTime.Now并且在测试中它可以在月末的情景中返回2月28日的游戏时间.

但有更好的方法吗?就像更加面向数据库的方法,因为它可以带来更好的性能?或者你会放入分布式缓存?这有一些众所周知的设计模式吗?

[1]典型例子:保险系统,核心银行系统实施的业务流程......

Lar*_*sen 0

我得出的结论是以下方法可行:

单元测试:

  • 模拟框架,根据需要控制时间

集成测试、用户驱动测试和生产:

  • 依赖注入,用于注入测试方法或生产方法
  • 测试方法:向NTP服务器询问现在是几点。该 NTP 服务器将连接到所有相关应用程序,而不是有自己的服务器。NTP 服务器将有一个标准接口,允许测试门户或管理员工具等程序根据需要更改它。
  • 制作方法:询问系统时间,即从连接的NTP服务器到所有服务器的时间

以下是调用 NTP 服务器的 C# 代码:从 C# 调用 NTP 服务器

拉尔斯