当前位置: 首页 > news >正文

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

昨天在查看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


相关文章:

  • Operations Manager 2007 代理部署到基于 Windows 的计算机-Part 2
  • 硬盘安装linux.让XP和linux共存!
  • 深入浅出web请求
  • 微软同步框架入门之七--定制同步提供程序(SyncProvider)
  • 《maven实战》学习笔记6——maven聚合和继承
  • 关于事务和丢失更新
  • SAP R3 display Vendor list, MKVZ .
  • HAproxy+keepalived安装配置教程
  • SMO学习笔记(三)——效验数据库备份文件
  • sqlite - java 初学
  • 魅力 .NET:从 Mono、.NET Core 说起
  • Ubuntu使用Remastersys封装制作系统ISO镜像
  • HTML5新增的元素详解
  • fedora学习笔记 7:su与su-切换用户
  • c语言第六次作业
  • 【划重点】MySQL技术内幕:InnoDB存储引擎
  • 2017年终总结、随想
  • angular学习第一篇-----环境搭建
  • JavaScript标准库系列——Math对象和Date对象(二)
  • JavaScript对象详解
  • Java编程基础24——递归练习
  • js继承的实现方法
  • Linux后台研发超实用命令总结
  • SAP云平台里Global Account和Sub Account的关系
  • TiDB 源码阅读系列文章(十)Chunk 和执行框架简介
  • underscore源码剖析之整体架构
  • vue从创建到完整的饿了么(18)购物车详细信息的展示与删除
  • 如何设计一个微型分布式架构?
  • 算法-图和图算法
  • 微服务框架lagom
  • 小程序、APP Store 需要的 SSL 证书是个什么东西?
  • 新书推荐|Windows黑客编程技术详解
  • python最赚钱的4个方向,你最心动的是哪个?
  • 测评:对于写作的人来说,Markdown是你最好的朋友 ...
  • 哈罗单车融资几十亿元,蚂蚁金服与春华资本加持 ...
  • 如何在招聘中考核.NET架构师
  • "无招胜有招"nbsp;史上最全的互…
  • # Swust 12th acm 邀请赛# [ A ] A+B problem [题解]
  • #LLM入门|Prompt#1.7_文本拓展_Expanding
  • $ git push -u origin master 推送到远程库出错
  • ( )的作用是将计算机中的信息传送给用户,计算机应用基础 吉大15春学期《计算机应用基础》在线作业二及答案...
  • (20050108)又读《平凡的世界》
  • (TOJ2804)Even? Odd?
  • (翻译)Entity Framework技巧系列之七 - Tip 26 – 28
  • (附源码)ssm考生评分系统 毕业设计 071114
  • (十)c52学习之旅-定时器实验
  • (转)程序员疫苗:代码注入
  • .NET开发者必备的11款免费工具
  • 。Net下Windows服务程序开发疑惑
  • /usr/bin/perl:bad interpreter:No such file or directory 的解决办法
  • @GetMapping和@RequestMapping的区别
  • @synthesize和@dynamic分别有什么作用?
  • [ 渗透测试面试篇 ] 渗透测试面试题大集合(详解)(十)RCE (远程代码/命令执行漏洞)相关面试题
  • [ 网络基础篇 ] MAP 迈普交换机常用命令详解
  • [120_移动开发Android]008_android开发之Pull操作xml文件