### 什么是好软件
好理解、易维护、高效(含优先级)
### 怎么构建”好理解“的软件
1、选择合适的数据结构,是好软件的开始;(把要处理的数据,具象化,抽象成一个具体的可描述物件;这样就不会把不相关的揉合到一块)
2、画依赖图、时序图:养成先画图的习惯;这样你一开始的目录结构和调用顺序就不会乱。
3、预留变化:有一些变化你开始就能预期到的,不要懒,别写成死代码;
### 软件好的表现
你看完《重构》这种大部头,还是不知道如何下手;以下是简单精准的手术刀操作:
~(参考HW内网某高级架构师总结的年度精品帖)~
1、<font color=red>**文件功能是否清晰**</font>;~检视文件包含的必要性,头文件只放对外的接口声明;面向接口编程的基石~
2、<font color=red>**函数功能是否单一**</font>;~函数命名古怪、冗长、描述不清;再多想一想~
3、<font color=red>**在同一个逻辑层次表述**</font>;~这条是抽象、解耦的基石,详见[代码逻辑层次](http://47.101.38.8:8090/archives/logic-level))~
### 其他不好的味道:
<font color=blue>反向依赖、重复代码、过长函数、过大的类、过多的注释、随处可见的extern</font>;
针对一些历史代码,如何去做重构?
1、消除所有的extern (头文件中函数对外声明是不需要extern关键字的)
2、全局变量消除 (如果有少量必须要全局保存的数据,理论上应该是在mian函数等地方传递,或者作为环境资源提供类似linux全局函数)
3、局部算法优化:看看哪些级联的if和switch可以用for循环的方式实现; (这句话的另外一层一次就是把特殊处理共性化,抽象出更高的逻辑层次来处理差异事物,复杂问题简单化)