目前在 Win Form 应用程序中,我使用一个全局变量类,其中包含用于共享数据的变量。我的问题是,还有什么其他方法可以实现这一目标?最佳实践?为什么?
问问题
2099 次
2 回答
2
全局变量不好的原因有很多,但最明显的原因可能是因为,理想情况下,每次调用相同的方法,传递相同的参数时,它应该总是做相同的事情并得到相同的结果。Globals 打破了这一规则。突然间,您的代码开始以不可预知的方式运行,因为在其他地方没有正确初始化某些东西,或者某些全局变量被错误地修改了。
我发现摆脱对全局变量的需求的最佳方法是遵守依赖注入 (DI) 的原则。网上有很多关于该主题的材料,但简而言之,与其让类自行创建或查找它们的依赖项,不如简单地请求将依赖项提供给它们,通常是在构造函数中。根据定义,您通过全局变量访问的任何内容都将被视为访问它们的类的依赖项。因此,而不是,例如,有一个全局设置对象,像这样:
Global settings As New Settings()
然后是一个像这样使用它的类:
Public Class MyClass
Public Sub DoSomething()
If settings.SomethingEnabled Then
' ...
End If
End Sub
End Class
相反,你会这样做:
Public Class MyClass
Public Sub New(settings As Settings)
_settings = settings
End Sub
Private _settings As Settings
Public Sub DoSomething()
If _settings.SomethingEnabled Then
' ...
End If
End Sub
End Class
这使您的代码更简洁、更灵活、更可靠。它还使代码也更具可测试性,这是一个很大的附加好处。
于 2012-12-22T02:43:22.563 回答