2

我们正在使用 Spring,我向我的同事建议他应该使用@Schedule而不是使用手动编码行为 aRunnableThread.sleep()

我指出注释更“高级”、更具描述性、更好的可配置性和可测试性,但这还不够令人信服。他争辩说他只需要一个非常简单的行为,所以使用“魔法”将是多余的,并导致不必要的开销。

我错过了一些好的论据吗?

4

1 回答 1

1

我认为这通常与您想要实现的抽象级别有关。在得到一些答案之前,我相信值得问一下:

这段代码有多少静态?换句话说,你所指的部分多久会随着时间而改变,无论是在逻辑上还是在它需要运行的时间表上?

基于这个问题,我认为无论使用什么框架/库,都应该尊重一件事:

任务的逻辑不应与它的调度方面交错。

因此,使用 Spring 或任何其他调度库都有第一个副作用,即除了调度和运行任务的部分之外,还为任务部分提供了单独的抽象。

因此,只要存在关注点和所需抽象的分离,我认为不使用任何特定库是可以的。另一方面,例如,如果不使用 Spring DI 来运行任务,那么可以再次争辩说实际上没有必要使用 Spring。

根据我对这个问题的理解,如果 Spring 对这个问题来说似乎太多了,我建议至少使用 Java 的 Timer 抽象。

于 2013-05-16T09:16:00.933 回答