天天看点

软编码和硬编码概念的区分与背后设计思想?

昨天在查看NHibernate一个帮助文档中,涉及到通过嵌入式读取配置文件消除对应用程序中对文件名的硬编码,第一次听说硬编码名词概念,在CSDN看到一些人对于这些概念的讨论,与硬编码对应的是软编码,对于硬编码和软编码定义其实是相对而言的,如果你了解这些名词,应该能够感觉其实与应用程序的设计上时异曲同工.  举一个实例:

硬编码主要是关联很紧密的结构,而软编码是关联比较松的。

从实现的层次上,也就是一级关联很多级关联的差别。比如

int i = 1; 这个是数字和变量的直接一级关联

#define pig 1

int i = pig; 这个是数字通过pig间接关联数字

多级关联的好处就是你可以通过修改中间的一层,而不需要直接改变对应的一层。比如你可以改变pig 2,而不需要改变int i = pig;

如果你觉得这样只不过是增加无聊的层次,那么首先应该认识到中间层带来的若干好处。比如清晰的逻辑划分:

#define pig 1

int i = pig

ing j = pig

i,j 都是对应一个逻辑词pig,而不是某个数字,我们可以预想到,如果pig需要改变,那么i,j都是应该改变的,因为他们逻辑相同。如果硬编码就不能表达这种逻辑上相同的关系,只能分别修改i,j。这就浪费一些时间,同时增加出错的可能性

 第二个是中间层可以抽象一个简单的使用界面出来,方便具体实现的修改:

同时是相面的例子,我们不需要理会pig具体是什么,也就是不需要理会pig的实现。这样就可以将实现和接口区分,pig可以修改而不干扰的使用它的代码。

#define pig 2

int i = pig; //不用改变

ing j = pig;  //不用改变