我想记录一下,封装在类中的代码是“基于时间的”,使用类似Java的语言--根据当前的时间,代码的行为有所不同。为了使它具有可测试性,它将从TimeProvider接口或类似的东西中读取。
发布于 2018-10-22 23:21:08
除非类的目的是向其他类提供日期和时间,否则类根本不应依赖于时间。这应该取决于数据。时间应该作为数据提供给它。例如,类可以接受服务的注入,该服务公开返回日期和时间的方法或属性。类不应该直接访问系统时钟。
如果您这样做,您可以替换一个不同的服务,例如,如果您希望用模拟或硬编码的时间测试系统来测试边界条件。
因此,问题变成--我如何指出一个基于提供给它的数据行为不同的类?答案是..。没有,真的,因为几乎所有的类都这样做。
发布于 2018-10-22 18:28:31
这个文档应该通过接口来完成,还是作为函数或属性在时间依赖类上完成呢?
都不是。
只有在测试的上下文中,对时间的依赖才是重要的。您不记录测试的代码,而是编写测试以记录代码。
在测试上下文之外,代码依赖于当前时间这一事实并不特别有趣,在这种情况下,不需要特定的文档,或者确实重要,在这种情况下,文档的数量和内容将很大程度上取决于实际的业务案例。它可以像方法的名称一样简单:
const getUsageForToday = function () {
...
};或者,正如一条详细的评论所解释的那样复杂,当一种特定的方法在午夜后被从英国调用时,当使用位于纽约的服务器并在GMT-5上配置时,它的行为就会有所不同。
如果是这样的话,哪个名词适合作为接口名来记录类是基于时间的事实?
这都取决于业务环境。同样,如果强调时间的重要性是有意义的,那么你会(相对地)很容易找到如何命名它。如果没有,那么就不必介绍使用您的代码的开发人员不需要知道的细节。
https://softwareengineering.stackexchange.com/questions/380406
复制相似问题