第七章 什么是敏捷设计
软件项目的设计是一个抽象的概念。它和程序的概括形状、结构以及每一个模块、类和方法的详细形状和结构有关。可以使用许多不同的媒介去描绘它,但是它最终体现为源代码。最后,源代码就是设计。
软件设计的臭味
僵化性 - 设计难以改变
脆弱性 - 设计易遭到破坏
牢固性 - 设计难以重用
粘滞性 - 难以做正确的事情
不必要的复杂性 - 过分的设计
不必要的重复 - 频繁的粘贴,赋值
晦涩性 - 混乱的表达,代码难以理解
软件腐化的原因
由于需求并没有按照初始设计的方式进行变化,从而导致了软件的退化,改动都很急迫,并且进行改动的开发人员对原始的设计思路并不熟悉,因此,虽然对设计的改动可以工作,但是他却以某种方式违反了原始设计,随着改动的不断进行,这些违反渐渐积累,设计开始出现臭味。
敏捷团队
敏捷团队依靠变化获取活力,不尽兴预先设计,保持系统设计尽可能的干净,简单,并使用许多单元测试和验收测试作为志愿,保持了设计的灵活性,易于理解性,利用这种灵活性,持续地改进设计,以便于每次迭代结束所生成的系统都具有最适合于那次迭代中需求的设计。
敏捷设计
敏捷设计是一个过程,不是一个事件。它是一个持续的应用原则、模式以及实践来改进软件的结构和可读性的过程。它致力于保持系统设计在任何时间都尽可能得简单、干净以及富有表现力。
第八章 单一责任原则(SRP)
在 SRP 中,我们把职责定义为变化的原因。如果你能够想到多于一个的动机去改变一个类,那么这个类就具有多于一个的职责。我们需要分离耦合的职责,并对其持久化。
结论
SRP 是所有原则中最简单的之一,也是最难运用的之一。我们会自然地把职责结合在一起。软件设计真正要做的许多内容,就是发现职责并把那些职责相互分离。事实上,我们要将论述的其余原则都会以这样或者那样的方式回到这个问题上。
第九章 开放—封闭原则(OCP)
软件实体 (类、模块、函数) 应该是可以扩展的,但是不可修改的。
开放封闭原则有两大特征
对于扩展是开放的有新的需求或变化时,可以对现有代码进行扩展,以适应新的情况。
对于修改是封闭的类一旦设计完成,就可以独立其工作,而不要对类尽任何修改。
结论
在许多方面,OCP 都是面向对象设计的核心所在。遵循这个原则可以带来面向对象技术所声称的巨大好处(也就是,灵活性、可重用性以及可维护性)。然而,并不是说只要使用一种面向对象语言就是遵循了这个原则。对于应用程序中的每个部分都肆意地进行抽象同样不是一个好主意。正确的做法是,开发人员应该仅仅对程序中呈现出频繁变化的那些部分做出抽象。拒绝不成熟的抽象和抽象本身一样重要。