.NET中的全局变量(或替代)最佳实践

时间:2009-02-03 16:34:49

标签: .net vb.net global-variables

在VB.NET WinForms应用程序中存储全局变量的最佳实践是什么。例如,当用户登录到应用程序时,您可能希望存储可在整个应用程序中访问的CurrentUser对象。你可以将它作为一个对象存储在一个模块中,或者创建一个包含所有必需全局变量的成员的类,你仍然需要将它的实例存储在某个地方。

框架是否为此提供了简单的解决方案?

6 个答案:

答案 0 :(得分:15)

我认为“不要”有点苛刻,这是Steve McConnell的引用:

  

与纪律,全局变量一起使用   在几种情况下都很有用

我认为就像一个优秀的木匠有合适的工具,如果需要,他们会使用正确的工具,程序员也应该使用所有工具。

直接使用'Tour de Force'代码完成是使用全局数据的几个原因:

  • 保护全球价值观
  • 精简使用非常普遍 数据
  • 消除流浪汉数据
麦康奈尔也说:

  

仅将全球数据用作最后的手段。   在使用全局之前   数据,考虑一些替代方案。

以下是他列出的替代方案:

  • 首先将每个变量设为本地 并根据需要将变量设为全局
  • 区分全球和阶级 变量
  • 使用访问例程

我在这里提到的事情在精彩的书Code Complete

中获得了很大的报道

答案 1 :(得分:8)

关于全局变量的使用,大约有一个最佳实践。

“不要”。

(如果这听起来很苛刻,请考虑像CurrentUser这样的东西通常属于环境已经为您维护一个独特实例的东西,例如Session。查找API以获取当前会话,将你的CurrentUser存储在那里并从那里检索它。不要创建你自己的全局变量,这将使你的应用程序更难维护并且容易受到竞争条件的影响。)

答案 2 :(得分:4)

您可以将全局可访问变量存储为相应类的公共只读静态属性,例如创建或填充它的那个。

答案 3 :(得分:3)

使用静态/全局变量严重损害代码的可测试性,因为测试不能确定它操作的对象不会在代码库看似无关的区域中引起副作用。

如果你有一个需要CurrentUser类实例的类,请让它在构造函数中请求它。

有关详细信息,请参阅此处: http://misko.hevery.com/code-reviewers-guide/flaw-brittle-global-state-singletons/

答案 4 :(得分:1)

我的做法是将 CurrentUser ConfigFilePath 等类似全局变量放入 program.vb (带 sub main的启动类) )。这样,没有人盲目地使用全局变量,因为必须通过 program 命名空间来访问它们。

在业务逻辑中,我从不直接使用全局变量。如果任何函数需要使用全局变量,则必须将其作为函数参数发送。

无法避免使用全局变量。恕我直言,最好用他们的真实姓名称呼他们并仔细使用它们然后用单身,会话或文件掩盖它们。

答案 5 :(得分:0)

singleton pattern比花园种类全球更安全。