什么是软编码? (反模式)
Posted
技术标签:
【中文标题】什么是软编码? (反模式)【英文标题】:What is soft coding? (Anti-pattern) 【发布时间】:2010-10-23 20:13:39 【问题描述】:我发现软编码反模式上的Wikipedia entry 简洁而令人困惑。那么什么是软编码?在什么设置下是不好的做法(反模式)?另外,什么时候可以认为是有益的,如果有,应该如何实施?
【问题讨论】:
这不适用于***关于软编码的文章,但有时一个有用的小技巧是在***上将您的语言从“英语”切换为“简单英语”。 【参考方案1】:简短的回答:为了避免硬编码而走极端,并最终使用一些令人费解的抽象层来维护,这比硬编码值从一开始就存在的情况更糟糕。即过度工程。
喜欢:
SpecialFileClass file = new SpecialFileClass( 200 ); // hard coded
SpecialFileClass file = new SpecialFileClass( DBConfig.Start().GetConnection().LookupValue("MaxBufferSizeOfSpecialFile").GetValue());
【讨论】:
虽然,你仍然有一个字符串。这可能应该在某个常量或某个属性中。【参考方案2】:Daily WTF article on soft coding 的主要观点是,由于过早的优化和恐惧,一个定义非常明确且没有重复知识的系统被更改并变得更加复杂而无需任何需要。
您应该牢记的主要事情是,如果您的更改确实改进了您的系统,并且避免轻易地将某些东西标记为反模式并通过各种方式避免它。配置系统并避免硬编码是解决系统中重复知识的简单方法(请参阅The Pragmatic Programmer Quick Reference Guide 中的第 11 点:“DRY Don't Repeat Yourself”)这是避免硬编码建议背后的驱动需求。 IE。理想情况下,如果您必须更改诸如错误消息之类的简单内容,则系统中应该只有一个位置(即代码或配置)应该更改。
【讨论】:
【参考方案3】:Ola,具有内置软编码概念的真实项目的一个很好的例子是Django 项目。他们的 settings.py 文件抽象了某些数据设置,以便您可以在那里进行更改,而不是将它们嵌入到您的代码中。如有必要,您还可以向该文件添加值并在必要时使用它们。
http://docs.djangoproject.com/en/dev/topics/settings/
示例:
这可能是来自 settings.py 文件的 sn-p:
num_rows = 20
然后在您的一个文件中,您可以访问该值:
from django.conf import settings
...
for x in xrange(settings.num_rows):
...
【讨论】:
"num_rows" 这里可能有点误导,而且是一个糟糕的例子,因为设置文件(应该)用于全局和/或应用程序特定设置,如“default_comment_count”、“template_directory”。 'num_rows' 看起来有点通用。 虽然这是一个示例,实际变量实际上并不重要,但“num_rows”实际上适合设置文件。假设您有几个页面,其中包含数据表。管理这些表中显示的行数的一种简单方法是使用设置文件中的变量。【参考方案4】:软编码:将外部来源的值插入计算机程序的过程。比如通过键盘、命令行界面插入值。软编码被认为是良好的编程实践,因为开发人员可以轻松地修改程序。 硬编码。在编写源代码的过程中为程序赋值,并制作程序的可执行文件。现在,更改或修改程序源代码值是非常困难的过程。与区块链技术一样,创世块是无法更改或修改的硬代码。
【讨论】:
【参考方案5】:软编码的终极:
const float pi = 3.1415; // Don't want to hardcode this everywhere in case we ever need to ship to Indiana.
【讨论】:
这对我来说似乎很好 - 它避免了用幻数使您的代码混乱,即使这些数字是恒定不变的。 我认为软编码的极致更像是: const int ONE = 1;常量 int 二 = 2;等 由于 pi = 3.1415926536,使用 pi = 3.1415 而不是 3.1416 让我觉得草率 - 在印第安纳州和其他地方。除非一个计数在第 5 位无关紧要。我最近与一个团队合作,其中 pi 的 16 位近似值和 32 位近似值之间的差异导致两个“假定相同”的结果集之间存在差异。仅在确认差异后才对差异进行会计处理。罕见 - 在极端情况下;但它发生了。 ..在今天的新闻中,一些认真的人没有开玩笑。 也许我错过了这个笑话,但这根本不是软编码。该值是硬编码的,尽管定义为命名常量。软编码是从配置文件、数据库、Web 服务等加载 PI。以上是关于什么是软编码? (反模式)的主要内容,如果未能解决你的问题,请参考以下文章