找最新合击传奇新闻资讯,就上http://www.byuee.cn!

意见 - 不要使用全球状态来管理本地问题

发布时间:2019-05-18 14:17
[在这篇重印的#altdevblogaday-opinion文章中,CCP的首席技术艺术家Rob Galanakis反对“软件行业的邪恶罪犯”,全球各州表示与其他代码混在一起未被注意到。]

我从MSFT博客的Raymond Chen的一个共同趋势中剔除了这个头衔。这里有很多关于它的帖子。

我可以尖叫它到天堂,但这并不意味着人们理解。全球都很糟糕。好吧,没有狗屎Sherlock。我不需要写另一篇博文来说明这一点。我想谈的是什么是全球性的。

很容易看到这个代码和面掌:
全球垃圾邮件=列表()
全球鸡蛋= dict()
global lastIndex = -1 但是我要讨论更多险恶的全局变量类型,这些变量与其他代码混合在一起可能会被忽视。生活在我们中间的全球人士。不再!继续阅读以了解如何发现这些邪恶的软件行业的罪犯。

环境变量

?有两类环境变量变异:可接受和谴责。没有“稍微错误”,只有'meh,我猜这没关系','你是一个可怕的人类。'
可接受的使用是在应用程序级别,可以小心地获取或设置环境变量,因为需要配置全局环境。可接受的还有设置持久性环境变量的情况,其中非常明确的意图和记录。不要肆无忌惮地设置环境变量,尤其是持久的环境变量!谴责是在库级别访问自定义环境变量。永远不要在库代码模块中访问环境变量(可能除了提供默认值之外)。始终允许传入这些值。访问库中的系统环境变量有时是可接受的使用。没有库代码应该设置环境变量.Commandline Args

查看有关环境变量的所有内容并乘以2.然后应用以下内容:
命令行使用仅在应用程序的入口点可接受。其他任何地方都不应该访问命令行args(除非提供默认值)。任何东西都不应该改变命令行参数。永远!单身人士

当人们将单身人士称为'模式'时,会略微(或略微)冒犯。模式通常用于讨论和分析代码,并具有积极的内涵。

单身人士很糟糕,应该不惜一切代价避免。他们只是一个全球性的另一个名字 - 如果你不使用全球,不要使用单身人士!单身人士应该只存在:
在应用程序级别(作为全局),并且仅在绝对必要时,例如没有状态的昂贵的创建对象。或者:在极其严重的性能关键领域,绝对没有别的办法。哦,还有:你想编写那些不可重复和不可测试的代码。所以,如果你确定你需要使用全局,请记住,把它看作是不是全局的而是传递它(即,通过依赖注入)。超级变态传奇私服电信但不要忘记:单身人士也是全球性的!

模块级/静态状态

模块级到你的pythonistas,静态到你的C ++ /。NET'ers。这是真的 - 如果您在静态类或模块上修改状态,那么您正在使用全局变量。这个唯一属于的地方通常用于缓存(即使这样,我也会敦促你重新考虑)。

如果你正在修改一个模块的状态 - 然后你就会承认你正在做什么,比如,不得不称之为“重新加载”以“修复”状态,那么你就是在冒犯你的同伴。请记住,这包括python中的'monkeypatching'类或模块级方法。

黄金法则

我用全局变量提出的黄金法则是,如果我无法预测修改状态的含义,就找到一种不修改状态的方法。如果您不确定的其他内容可能依赖于某个状态或值,不会更改。更好的是,摆脱了局面。这意味着,您可以保留所有全局变量以及可以被视为全局的任何内容(访问env变量,单例,静态,命令行args),完全

您想要全局变量的唯一位置是最高级别的应用程序逻辑。这是你可以设计一些你了解全局变量的唯一方法的唯一方法,严格遵守这个设计将极大地提高代码的可移植性。

同意?不同意?我错过了任何pseu吗? [在这篇重印的#altdevblogaday-opinion文章中,CCP的首席技术艺术家Rob Galanakis反对“软件行业的邪恶罪犯”,全球各州表示与其他代码混在一起未被注意到。]

我从MSFT博客的Raymond Chen的一个共同趋势中剔除了这个头衔。这里有很多关于它的帖子。

我可以尖叫它到天堂,但这并不意味着人们理解。全球都很糟糕。好吧,没有狗屎Sherlock。我不需要写另一篇博文来说明这一点。我想谈的是什么是全球性的。

很容易看到这个代码和面掌:
全球垃圾邮件=列表()
全球鸡蛋= dict()
global lastIndex = -1 但是我要讨论更多险恶的全局变量类型,这些变量与其他代码混合在一起可能会被忽视。生活在我们中间的全球人士。不再!继续阅读以了解如何发现这些邪恶的软件行业的罪犯。

环境变量

?有两类环境变量变异:可接受和谴责。没有“稍微错误”,只有'meh,我猜这没关系','你是一个可怕的人类。'
可接受的使用是在应用程序级别,可以小心地获取或设置环境变量,因为需要配置全局环境。可接受的还有设置持久性环境变量的情况,其中非常明确的意仿盛大传奇雪域升级图和记录。不要肆无忌惮地设置环境变量,尤其是持久的环境变量!谴责是在库级别访问自定义环境变量。永远不要在库代码模块中访问环境变量(可能除了提供默认值之外)。始终允许传入这些值。访问库中的系统环境变量有时是可接受的使用。没有库代码应该设置环境变量.Commandline Args

查看有关环境变量的所有内容并乘以2.然后应用以下内容:
命令行使用仅在应用程序的入口点可接受。其他任何地方都不应该访问命令行args(除非提供默认值)。任何东西都不应该改变命令行参数。永远!单身人士

当人们将单身人士称为'模式'时,会略微(或略微)冒犯。模式通常用于讨论和分析代码,并具有积极的内涵。

单身人士很糟糕,应该不惜一切代价避免。他们只是一个全球性的另一个名字 - 如果你不使用全球,不要使用单身人士!单身人士应该只存在:
在应用程序级别(作为全局),并且仅在绝对必要时,例如没有状态的昂贵的创建对象。或者:在极其严重的性能关键领域,绝对没有别的办法。哦,还有:你想编写那些不可重复和不可测试的代码。所以,如果你确定你需要使用全局,请记住,把它看作是不是全局的而是传递它(即,通过依赖注入)。但不要忘记:单身人士也是全球性的!

模块级/静态状态

模块级到你的pythonistas,静态到你的C ++ /。NET'ers。这是真的 - 如果您在静态类或模块上修改状态,那么您正在使用全局变量。这个唯一属于的地方通常用于缓存(即使这样,我也会敦促你重新考虑)。

如果你正在修改一个模块的状态 - 然后你就会承认你正在做什么,比如,不得不称之为“重新加载”以“修复”状态,那么你就是在冒犯你的同伴。请记住,这包括python中的'monkeypatching'类或模块级方法。

黄金法则

我用全局变量提出的黄金法则是,如果我无法预测修改状态的含义,就找到一种不修改状态的方法。如果您不确定的其他内容可能依赖于某个状态或值,不会更改。更好的是,摆脱了局面。这意味着,您可以保留所有全局变量以及可以被视为全局的任何内容(访问env变量,单例,静态,命令行args),完全

您想要全局变量的唯一位置是最高级别的应用程序逻辑。这是你可以设计一些你了解全局变量的唯一方法的唯一方法,严格遵守这个设计将极大地提高代码的可移植性。

同意?不同意?我错过了任何pseu吗?

上一篇:塞尔达球迷可以选择Nintendo而不是共同组织

下一篇:Round-Up-新学校活动,乐高星球大战2,吉尔曼首次亮相

相关文章: