我发现关于软编码反模式的维基百科条目简洁而令人困惑。那么什么是软编码?在什么设置下是不好的做法(反模式)?此外,什么时候可以认为它是有益的,如果是,应该如何实施?
5 回答
简短的回答:为了避免硬编码而走极端,并最终使用一些令人费解的抽象层来维持这比硬编码值从一开始就存在的情况更糟糕。即过度工程。
像:
SpecialFileClass file = new SpecialFileClass( 200 ); // hard coded
SpecialFileClass file = new SpecialFileClass( DBConfig.Start().GetConnection().LookupValue("MaxBufferSizeOfSpecialFile").GetValue());
Daily WTF 关于软编码的文章的主要观点是,由于过早的优化和恐惧,一个定义非常明确且没有重复知识的系统会被更改并变得更加复杂而无需任何必要。
您应该记住的主要事情是,如果您的更改确实改善了您的系统,并避免轻描淡写地将某些东西标记为反模式并通过各种方式避免它。配置您的系统并避免硬编码是解决系统中重复知识的简单方法(请参阅The Pragmatic Programmer Quick Reference Guide中的第 11 点:“DRY Don't Repeat Yourself” )这是避免硬编码建议背后的驱动需求。即理想情况下,如果您必须更改诸如错误消息之类的简单内容,则系统中应该只有一个位置(即代码或配置)应该更改。
Ola,一个很好的例子,一个内置软编码概念的真实项目是Django项目。他们的 settings.py 文件抽象了某些数据设置,以便您可以在那里进行更改,而不是将它们嵌入到您的代码中。如有必要,您还可以向该文件添加值并在必要时使用它们。
http://docs.djangoproject.com/en/dev/topics/settings/
示例:
这可能是来自 settings.py 文件的片段:
num_rows = 20
然后在您的一个文件中,您可以访问该值:
from django.conf import settings
...
for x in xrange(settings.num_rows):
...
软编码:将外部来源的值插入计算机程序的过程。比如通过键盘、命令行界面插入值。软编码被认为是良好的编程实践,因为开发人员可以轻松地修改程序。硬编码。在编写源代码的过程中给程序赋值,并制作程序的可执行文件。现在,改变或修改程序源代码值是非常困难的过程。与区块链技术一样,创世块是无法更改或修改的硬代码。
终极软编码:
const float pi = 3.1415; // Don't want to hardcode this everywhere in case we ever need to ship to Indiana.