Coding style 你对硬编码的态度是什么?

Coding style 你对硬编码的态度是什么?,coding-style,hard-coding,Coding Style,Hard Coding,我的是: 硬编码是一种方式!我所有的问题都解决了。一个接一个地编码就行了。而问题又回来了,这会毁了你的一天 我绝对讨厌它,但事实是“商人”倾向于喜欢它,因为它花更少的时间来得到他们想要的东西。作为一名软件开发人员,尤其是在公司环境中工作的软件开发人员,大多数人会说:“是啊,何必麻烦呢,只是硬编码而已。”。您对硬编码的态度如何?我通常会尝试将值放入配置文件,而不是硬编码。如果一个值必须硬编码,我用硬编码的值创建一个常量,代码中的任何地方都引用相同的常量。如果值需要更改,可以在一个位置进行 对于应用

我的是:

硬编码是一种方式!我所有的问题都解决了。一个接一个地编码就行了。而问题又回来了,这会毁了你的一天


我绝对讨厌它,但事实是“商人”倾向于喜欢它,因为它花更少的时间来得到他们想要的东西。作为一名软件开发人员,尤其是在公司环境中工作的软件开发人员,大多数人会说:“是啊,何必麻烦呢,只是硬编码而已。”。您对硬编码的态度如何?

我通常会尝试将值放入配置文件,而不是硬编码。如果一个值必须硬编码,我用硬编码的值创建一个常量,代码中的任何地方都引用相同的常量。如果值需要更改,可以在一个位置进行

对于应用程序范围的常量,我通常创建一个类并在其中创建常量

硬编码是应该尽可能避免的事情

如果你在你的代码上硬编码一些东西,它将在很大程度上完全“破坏”你的代码。即使使用与平台无关的语言,您也不能说“编译一次,在任何地方运行”。因为这不是一个好的软件工程实践,我认为避免硬代码更好

但我知道在某些情况下我们需要它,特别是在调试代码时。我建议的方法是:首先用硬代码开发代码,使其稳定并消除硬代码,然后


由于安全问题等原因,我们可能需要硬编码。您可能不允许使用注册表、配置文件或任何东西,因为它们会增加攻击面。但我认为这是一种罕见的情况。

硬编码是一种方式

但是正如Anthony提到的,我将可配置值放在它们自己的类中。通过这种方式,它们可以在编译时进行配置,但不会增加配置外部xml/txt文件所带来的复杂性

我只在绝对必要的情况下使用xml/txt文件进行配置。否则,你只是过度工程化了,这可能和硬编码一样糟糕,如果不比硬编码更糟糕的话。更不用说,人们在配置文件中放了很多东西,你根本不想让客户端改变

如果不同的客户端需要不同的配置,没问题,请将硬编码值放入它们自己的程序集/dll中,并为每个客户端部署不同的配置程序集


正如我所说,这是实现变革的关键。

作为一个在我早期有硬编码经验的人(不要告诉任何人,伙计),我可以自信地告诉你,它会再次困扰你。我制作了一个应用程序(我现在不谈这个),它必须完全重新编写,因为它有很多硬编码的内容。那是在1998年,伙计


除非你不想在将来支持该客户,否则不要这样做。您现在节省的时间,将用于以后的修复。

涉及到几个因素,很难做出涵盖所有情况的断言

如果它是一个有几个周期的长项目,那么如果您开始硬编码,它们很可能很快就会再次弹出。因此,在这些情况下,最好使用适当的解决方案进行修复

但是,如果你有一个周期短的项目,或者有预定义的时间表,并且你无论如何都必须交付产品,那么如果产品能够工作,大多数客户都会感到满意,他们不会关心内部问题。但在这些情况下,我更喜欢硬编码解决方案,但让路径打开,以便在将来很容易制定出合适的解决方案

硬编码无论如何都是不好的,但我认为如果你能正确地记录下来,它可以让下一个人的生活变得更轻松,而且可能不会诅咒你,至少不会诅咒你太多;)


但根据我的经验,我开始避免从一开始就硬编码,只有在我没有其他选择的时候才使用它们,并且总是记录这些情况,以便以后我有时间时能够正确地修复它。

只要有正确的理由,硬编码没有错

“正确操作”意味着将所有硬编码集中在一个或两个模块中

对于C,定义codes中的所有值。对于Java,h有一个codes.Java类,该类只包含公共常量

硬编码有几个“正确的理由”

  • 简单
  • 支持-如果您的值位于外部配置文件中,您就无法保护自己免受愚蠢配置的影响,也无法测试所有可能的配置,如果它是硬编码的,那么您就知道要处理什么了
  • 表演
  • 可读性。您可以在编辑会话中查看所有需要了解的内容
还有几个原因可以避免配置文件过于复杂。如果你有足够的参数和选项,你最终只能用一种不太好的语言编程

得到他们想要的东西所需的时间更少

这几乎就像是在说,“我喜欢编写没有注释的代码,因为获得我想要的东西所需的时间更少。”

当然,这并不是说硬编码总是一件非常糟糕的事情。(我的意思是,在配置文件中存储一个数学常数,比如π、e或普朗克常数,这有点愚蠢。此外,硬编码一个查找表,比如正弦/余弦值,可能比从文件中加载要高效得多。)但硬编码数据纯粹是为了方便不是一个聪明的主意。它缺乏灵活性,使得以后修改数据比必须的要麻烦得多


此外,硬编码可能会使本地化非常困难,如果不是在许多情况下不可能的话。如果它是某家公司的内部应用程序,那么我想它在某种程度上并不重要,但这并不能使它成为一种良好的软件开发实践。

从概念上讲,我不喜欢太多硬编码

但在实践中,我倾向于硬编码一些值。主要原因是
File.Open(configuration["widgetsFileStorage"] + "/" + widgetImage)
LinkWriter.href=configuration["supportUrl"]
File.Open(new WidgetFileLocater().GetUncPath(widgetImage))