从项目始末谈面向对象——领域分析、需求分析、分析模型、设计、实现
经过了六年的工作经验,有必要从实战的角度来谈面向对象设计。
因为经验派跟学院派的总结或多或少有些不同,也只有经历过,才知道血汗之辛苦。
“没经历过炮火的摧残,是不会知道战略、战术的实施智慧”。
以前从课本上、培训教材上看到的,一实际实践起来还是有很多的艰辛要体验。
毕竟没有实践经验的,多多少少有点纸上谈兵的毛病,对实际情况做了很多理想化的假设。
一个实际的项目往往受到三角制约:时间、工作量、进度。
因此,很多设计实际上必须经历权衡,而不是想当然的完美设计,
而且在实际上的设计由于系统本身的约束关系, 也必须在某些特性之间做权衡。
因此在设计过程中有时为了防止过度设计,可能会遵从一些简单的原则,这些原则可能要根据个人的品味去领悟了。
其实,我也领悟不是很深。
原则:
1)一致性:正交性(不要将独立的东西耦合起来)、妥适性(不要引入无形的东西)、普遍性(不要限制固有的东西)。
2)简单(KISS):简化你的设计,不过从实际的工作经验来看要简化你的设计其实是很难的,需要你多层次的思考,才能达到简化。
也可以说简单是经历过后的境界,随便的简单,其实就是一种粗暴的行为。
3)三思而后行:想清楚你要做什么,避免返工,劳心劳力。
4)尽快建立原型:可以工作的程序,胜过完备的文档。
以下附上UNIX的设计哲学,觉得UNIX设计哲学从实践的角度来看,更有指导意义。
上面的一致性和简单性有时是有矛盾的,需要牺牲一方成就另一方。
这里引“简单之美——系统设计黄金法则”,对比学院派和实践派方法的不同。