如何最佳实践地在 VB.NET WinForms 应用程序中存储全局变量?例如,当用户登录应用程序时,您可能希望存储一个 CurrentUser 对象,该对象可以在整个应用程序中访问。您可以将其存储为模块中的对象或创建一个包含所有所需全局成员的类,但仍需要在某处存储此实例。
框架是否提供了简单的解决方案?
如何最佳实践地在 VB.NET WinForms 应用程序中存储全局变量?例如,当用户登录应用程序时,您可能希望存储一个 CurrentUser 对象,该对象可以在整个应用程序中访问。您可以将其存储为模块中的对象或创建一个包含所有所需全局成员的类,但仍需要在某处存储此实例。
框架是否提供了简单的解决方案?
我认为“不要”有点过分了,这是 Steve McConnell 的一句话:
如果使用得当,全局变量在多种情况下都很有用
就像好的木匠会选择合适的工具,在需要时使用正确的工具一样,程序员也应该利用他们掌握的所有工具。
来自《Code Complete》的“Tour de Force”一书中提供了使用全局数据的几个原因:
McConnell 还说:
只有在万不得已时使用全局数据。在使用全局数据之前,请考虑一些替代方案。
他列出的替代方案如下:
我提到的内容在优秀的书籍《Code Complete》中得到了广泛的覆盖。
在使用全局变量方面,大约有一条最佳实践。
“不要使用。”
(如果这听起来很严厉,请考虑像 CurrentUser 这样的东西通常应该属于环境已经为您维护了唯一实例的某个东西,例如 Session。查找 API 以获取当前会话,将您的 CurrentUser 存储在那里并从那里检索它。不要创建自己的全局变量,这将使您的应用程序更难以维护,并容易受到竞争条件的影响。)
您可以将全局可访问的变量存储为适当类的公共只读静态属性,例如创建或填充它的类。
我的做法是将像CurrentUser,ConfigFilePath等全局变量放入program.vb(启动类与sub main)。这样,没有人会毫无意识地使用全局变量,因为它们必须通过program命名空间访问。
在业务逻辑中,我从不直接使用全局变量。如果任何函数需要使用全局变量,则必须将其作为函数参数发送。
无法避免使用全局变量。在我看来,最好用它们的真实名称调用它们并小心使用它们,而不是将它们掩盖在单例、会话或文件中。
单例模式比普通的全局变量更安全。