如何处理OO应用程序中的跨领域问题?使用Singleton?依赖注入?什么?

dev*_*ium 5 c# java oop singleton

假设我正在设计一个应用程序,我需要使用全局计时系统(这是一个跨领域的问题).我需要从我的应用程序的任何地方访问来自该全球计时系统的数据,并且我不能看到"应用程序的这部分需要它而另一部分不需要".

我的问题是..我应该将其设计为一种环境语境(在这种情况下,是Singleton),还是应该尝试设计其他方式来适应这种情况?

我当然不认为让我的所有类必须通过构造函数注入将这个全局计时类传递给它们是正确的.很多时候我必须将参考文件真正传递到链中,直到某些类最终需要它.另一方面,从阅读的角度来看,它会使一切变得更加清晰(它清楚地说明了我的类的依赖性).

人们通常如何处理这个问题?有没有其他技术可以帮助解决这个问题?AOP可能吗?

PS:全球计时系统只是我从一本我正在阅读的书中获取的一个想法.日志系统将是这类问题的另一个很好的例子.

谢谢

Gra*_*ton 3

正如您所建议的,面向方面编程(AOP)的设计就是考虑到了这类事情,所以我当然会检查一下。

虽然构造函数注入在这种情况下看起来确实很麻烦,但使用IOC 容器可能会帮助减轻一点痛苦。单例似乎确实很符合要求,但由于静态性,它们带来了可测试性问题 - 但您可以通过将其分成两部分来解决这个问题。

  • @devoured - 这是我在 Roy Osherove 的“单元测试的艺术”中读到的内容,关于将单例的工厂部分与静态部分分开,以便您可以在测试中替换它以返回您喜欢的内容。这有一点:http://weblogs.asp.net/rosherove/archive/2007/06/10/tips-for-testable-code-and-for-testing-legacy-code.aspx (2认同)