把系统中复杂和经常变化的模块单独封装。
抽象的好处在于 你设计的时候 能忽略无关的细节。
封装帮助你管理 系统的复杂度的方法在于不让你看到那些复杂度。
在设计类的时候,要养成一个习惯。 问自己 “我该隐藏些什么字段和函数”
你会惊奇的发现,有很多棘手的设计难题都会在你面前化解。
好的程序设计所面临的最重要挑战之一就是适应变化。目标应该是把不稳定的区域隔离出来。从而把所带来的影响限制在一个子程序、类或者包的内部。
方法是:
1、找出看起来容易变化的模块。
2、把容易变化的模块分离出来。把容易变化的组件单独划分成类。
设计好类的接口,把变化限制在类的内部,且不会影响类的外部。任何使用了这个将会发生变化的类的其他类都不会察觉到变化的存在。
下面列举出容易发生变化的区域:
1、业务规则 比如说业务逻辑处理,这样 即使更换了 界面框架,业务逻辑就不用动。
2、对硬件的依赖性 这种隔离会非常有利于你把程序移植到新的硬件环境。同样,也方便你对系统模块进行测试。比如说 当硬件功能模块尚不稳定的时候,你可以 用软件作为模拟器 模拟硬件的输入输出 来替代硬件,继续开发。等硬件可用的时候再与软件连接。
3、输入输出 如数据的存储方式 之前用文本存储后来改为数据存储。
4、非标准的语言特性 比如你系统中使用了第三方框架 那么,以后可能会舍弃使用这套框架,那么 你应该用一个单独的类 或子模块 封装对 这些第三方框架的调用。
5、困难的设计 把觉得设计的很差而需要重新做的模块 隔离出来 以减少它对系统其余部分的可能影响降至最低。
6、复杂的设计 把复杂的算法 封装,因为 复杂的模块 出错的概率 比较大 需要优化的概率很高 这跟第五条类似
7、状态变量 把状态描述的变量 尽量用枚举而非 布尔变量。 一开始用布尔变量来定义后,往往到后期会发现 除了 true 和 false 以外还需要别的状态,就改用枚举。
且使用访问器子程序 访问状态的值 而不是 对状态变量的直接检查。
8、数据量的限制 如定义一个具有100个元素的数组的时候,实质上向外部透露一些它们并不需要的知道的信息,这样会增加理解系统的复杂度。应该用 常量 MAX_LENGTH 来隐藏。
原文出处:http://www.cnblogs.com/zhuojun/