1

目前在 Win Form 应用程序中,我使用一个全局变量类,其中包含用于共享数据的变量。我的问题是,还有什么其他方法可以实现这一目标?最佳实践?为什么?

4

2 回答 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 回答
0

应根据将如何使用数据来共享数据。如果整个应用程序都需要一个变量,那么它可以被视为具有全局范围,并且全局变量概念(例如公共静态共享)可能是合适的。

通常情况并非如此,因为应该真正避免使用全局变量(查看此处此处以获得更多推理)

数据应封装在所需的级别 - 例如,如果表单中包含适用于其功能的数据/变量,但其他表单现在需要该值,这将是公共只读属性的理想情况表格,它将从应用程序的其余部分掩盖变量的实际细节。

于 2012-12-21T23:59:08.577 回答