加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c# – 申请时间的设计模式?

发布时间:2020-12-15 08:34:49 所属栏目:百科 来源:网络整理
导读:如果构建业务流程依赖于它的时间[1]的系统,则不能在代码中使用DateTime.Now或类似,因为您必须处理测试,例如,未来的月末或年终场景.使用SSL证书时通常不能更改操作系统时间,因为对分布式系统执行更正是很复杂的. 一种选择是创建一个单一服务,该服务可由返回当
如果构建业务流程依赖于它的时间[1]的系统,则不能在代码中使用DateTime.Now或类似,因为您必须处理测试,例如,未来的月末或年终场景.使用SSL证书时通常不能更改操作系统时间,因为对分布式系统执行更正是很复杂的.

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

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

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

解决方法

处理此问题的一种方法是使用 clock interface:
public interface IClock {
  DateTime Now { get; }
}

并在整个代码中使用此接口,代替DateTime.Now.在生产中,您将使用其规范实现(或UTC变体):

public class SystemClock implements IClock {
  public DateTime Now { get { return DateTime.Now; } }
}

例如,您可以在需要IClock的所有类中使用SystemClock作为默认值,并允许通过构造函数或setter注入其他实现.

在测试中,您可以创建测试实现或使用模拟框架对其进行模拟.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读