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

简介:

昨天在查看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;  //不用改变

不过软编码比硬编码要复杂一些,对以后的考虑要周到一些。软编码是一种设计,而硬编码不过是一种具体的实现。软件开发不只是需要一个软件的实现,更需要软件能够很好的修改,方便得扩展,所以需要一些设计技巧在里面

其实我们常说对程序进一步重构,我们目的就是实现对象之间的松耦合,使程序能够应对多种情况下的变化,具有一定的扩展性,对于这两个名词其实它的背后隐藏的是一种设计思想,硬编码和软编码只是一种表现在实际情况中一种问题,而这种思想可以应用于多个方面,面对多个问题。

总结思想比总结问题 要更加高效,以不变应万变。

本文转自chenkaiunion 51CTO博客,原文链接:http://blog.51cto.com/chenkai/765453


相关文章
|
存储 安全 Java
BlockingQueue(阻塞队列)基本使用指南
BlockingQueue(阻塞队列)基本使用指南
386 1
|
存储 关系型数据库 MySQL
MySQL控制流函数-if 、elseif、else、case...when
MySQL控制流函数-if 、elseif、else、case...when
427 0
MySQL控制流函数-if 、elseif、else、case...when
|
Oracle 关系型数据库 数据库
oracle exp&imp之IMP-00037: Character set marker unknown
    最近,为地市技术人员做技术支持,碰到一个很奇怪的问题,别人给他提供一个exp的dmp文件,他在本地进行imp的时候报错:IMP-00037:Character set marker unknown 报错信息如下: C:\Users\localadmin>i...
4629 0
|
存储 Java 关系型数据库
SpringBoot jpa调用MySQL存储过程
SpringBoot jpa调用MySQL存储过程
SpringBoot jpa调用MySQL存储过程
|
6月前
|
机器学习/深度学习 人工智能 自然语言处理
多模态AI核心技术:CLIP与SigLIP技术原理与应用进展
近年来,多模态表示学习在人工智能领域取得显著进展,CLIP和SigLIP成为里程碑式模型。CLIP由OpenAI提出,通过对比学习对齐图像与文本嵌入空间,具备强大零样本学习能力;SigLIP由Google开发,采用sigmoid损失函数优化训练效率与可扩展性。两者推动了多模态大型语言模型(MLLMs)的发展,如LLaVA、BLIP-2和Flamingo等,实现了视觉问答、图像描述生成等复杂任务。这些模型不仅拓展了理论边界,还为医疗、教育等领域释放技术潜力,标志着多模态智能系统的重要进步。
880 13
多模态AI核心技术:CLIP与SigLIP技术原理与应用进展
|
机器学习/深度学习 并行计算 编译器
AVX2指令集简介和代码示例
这篇文章介绍了AVX2指令集,它是Intel在2013年为提高处理器并行计算能力引入的SIMD技术。AVX2增强了整数运算,包括256位操作和位操作,还提供了FMA指令及更多广播和转换功能。与AVX相比,AVX2在图像处理和媒体编码等领域有显著优势。文章通过一个C代码示例展示了如何使用AVX2进行向量加法,并提醒编译时需确保支持AVX2指令集。
3354 4
|
数据安全/隐私保护 Docker 容器
配置Harbor支持https功能实战篇
关于如何配置Harbor支持HTTPS功能的详细教程。
644 12
配置Harbor支持https功能实战篇
|
人工智能 自然语言处理 算法
瓴羊Quick Service智能客服算法通过国家网信办深度合成服务算法备案
瓴羊Quick Service智能客服算法通过国家网信办深度合成服务算法备案
260 2
|
11月前
|
安全 Oracle Java
burpsuite基本使用
burpsuite基本使用
|
存储 Java 开发工具
Git 仓库瘦身与 LFS 大文件存储
【8月更文挑战第13天】在软件开发中,Git仓库可能因累积大量数据而变得臃肿。通过删除多余分支和标签、清理无用提交,并利用`git gc`命令,可有效瘦身仓库。此外,使用Git LFS(Large File Storage)管理大文件,不仅能维持仓库精简,还能高效协作。需先安装并初始化LFS,然后跟踪特定格式的大文件。通过标准的`git add`和`git commit`命令即可管理这些文件,LFS会自动处理其存储与传输。这种方式有助于提升仓库性能与可维护性,但需注意可能产生的额外存储成本。
415 1