.NET 中的全局变量(或替代方案)最佳实践
-
21-08-2019 - |
题
在 VB.NET WinForms 应用程序中存储全局变量的最佳实践是什么。例如,当用户登录应用程序时,您可能希望存储一个可以在整个应用程序中访问的 CurrentUser 对象。您可以将其存储为模块中的对象,或者创建一个包含所有所需全局变量的成员的类,但您仍然需要将其实例存储在某处。
该框架是否为此提供了简单的解决方案?
解决方案
我认为“不要”有点严厉,这是史蒂夫·麦康奈尔的一句话:
与纪律一起使用,全局变量在几种情况下很有用
我认为就像一个好的木匠拥有适合工作的正确工具并且在需要时会使用正确的工具一样,程序员也应该使用他们可以使用的所有工具。
直接来自“Tour de Force”代码完整的内容是使用全球数据的几个原因:
- 保护全球价值观
- 简化了极为常见数据的使用
- 消除流浪数据
麦康奈尔还说:
仅将全局数据用作最后的手段。在使用全局数据之前,请考虑一些替代方案。
以下是他列出的替代方案:
- 首先使每个变量本地变量并使变量全局仅在您需要的情况下进行全局
- 区分全球变量
- 使用访问例程
我在这里提到的事情在这本精彩的书中得到了很好的报道 代码完成
其他提示
有是关于使用全局变量的大约一最佳实践。
“不要”。
(如果这听起来很苛刻,认为事情像CurrentUser在一些环境中的已的维持的唯一实例为你,如会话通常属于:我们提供了API来获取当前会议上,存储你的CurrentUser那里,并从那里获取它。不要创建自己的全局,这会使你的应用程序难以维持和脆弱的竞争条件。)
您可以存储全局可访问的变量作为适当的类的公共只读静态属性,如创建或填充它的一个。
使用静态/全局变量是严重有损于你的代码的可测试性,因为测试不能肯定的是,它的对象操纵不会导致在代码库的看似无关的领域副作用。
如果您有需要CurrentUser类的实例类,使之在其构造提出要求。
在这里看到更多的信息: http://misko.hevery.com/code -reviewers导/缺陷脆全局状态-单身/
我的做法是把全局变量一样的 CurrentUser 的 ConfigFilePath 的和类似成的 program.vb 的(启动用的类子主)。没有人这样使用全局变量盲目作为其必须通过被访问的程序的命名空间。
在商业逻辑,我从来没有直接使用全局变量。如果有任何功能需要使用全局变量,必须将它送到作为函数参数。
有没有办法避免使用全局变量。恕我直言,最好叫他们用自己的真实姓名,并小心使用他们,那么,以掩盖他们在单身,会议或文件。
在单例模式是比一个花园各种全球安全。