昨天在查看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; //不用改变
不过软编码比硬编码要复杂一些,对以后的考虑要周到一些。软编码是一种设计,而硬编码不过是一种具体的实现。软件开发不只是需要一个软件的实现,更需要软件能够很好的修改,方便得扩展,所以需要一些设计技巧在里面
其实我们常说对程序进一步重构,我们目的就是实现对象之间的松耦合,使程序能够应对多种情况下的变化,具有一定的扩展性,对于这两个名词其实它的背后隐藏的是一种设计思想,硬编码和软编码只是一种表现在实际情况中一种问题,而这种思想可以应用于多个方面,面对多个问题。
总结思想比总结问题 要更加高效,以不变应万变。