敏捷设计理念
- Agility,指以微小增量的方式构建软件.
- 全局视图和软件一起演化.每次迭代中,都使设计尽可能适合于当前系统,而不会花时间去预测未来的需求,更不会试图构建一些基础结构去支撑未来才需要的特性.更关注的是当前的系统.
- 不进行预先设计,不需要成熟的初始设计.而保持设计尽可能的干净,简单.并使用单元测试和验收测试来保证.
- 需求处在不停变化的状态之中,如果设计由于需求变化而退化,那么就不是敏捷的.
- 在实现新需求时,应改进原有设计以让设计对新变化的同类变化具有弹性.而不是设法给设计打补丁.
- 敏捷设计是一个过程,而不是事件.
- Design,源代码就是设计,而UML图示只是设计的附属物而不是设计本身.
- 设计中的臭味常常是由于违反了原则而导致的.当臭味出现时,才应用原则来去除臭味.但不应该无条件的使用这些原则,这样会导致不必要的设计上的臭味(复杂性).
- rigidity僵化. 难以改动.改动会迫使许多对系统其它部分的其他改动.
- fragility脆弱. 改动会导致在概念上无关的部分出现问题.
- immobility牢固. 很难将一些对其它系统有用的部分从系统中分离出来.
- viscosity粘滞. 做正确的事情要难于做错误的事情.
- 不必要的复杂性. 不具有任何直接好处的基础结构.为了预测的变化而设计的.
- 不必要的重复. 本可以使用单一的抽象进行统一的重复的结构.(copy-paste).
- Opacity晦涩. 没有表现出意图.难以阅读理解.
- 不能因为设计的退化而责怪需求的变化.因为需求是项目中最不稳定的因素.所以,应让设计对于变化具有弹性,并且应用实践来防止设计腐化.
[Agile Software Development(Principles,Patterns,and Pracitices)]