软件项目的设计是一个抽象的概念。它和程序的归纳形状、结构以及每个模块、类和方法的详细形状和结构有关。可使用许多不一样的媒介去描绘它,可是它最终体现为源代码。最后,源代码就是设计。函数
因为需求并无按照初始设计的方式进行变化,从而致使了软件的退化,改动都很急迫,而且进行改动的开发人员对原始的设计思路并不熟悉,所以,虽然对设计的改动能够工做,可是他却以某种方式违反了原始设计,随着改动的不断进行,这些违反渐渐积累,设计开始出现臭味。单元测试
敏捷团队依靠变化获取活力,不尽兴预先设计,保持系统设计尽量的干净,简单,并使用许多单元测试和验收测试做为志愿,保持了设计的灵活性,易于理解性,利用这种灵活性,持续地改进设计,以便于每次迭代结束所生成的系统都具备最适合于那次迭代中需求的设计。测试
敏捷设计是一个过程,不是一个事件。它是一个持续的应用原则、模式以及实践来改进软件的结构和可读性的过程。它致力于保持系统设计在任什么时候间都尽量得简单、 干净以及富有表现力。设计
在SRP中,咱们把职责定义为变化的缘由。若是你可以想到多于一个的动机去改变一个类,那么这个类就具备多于一个的职责。咱们须要分离耦合的职责,并对其持久化。对象
SRP是全部原则中最简单的之一,也是最难运用的之一。咱们会天然地把职责结合在一块儿。软件设计真正要作的许多内容,就是发现职责并把那些职责相互分离。事实上,咱们要将论述的其他原则都会以这样或者那样的方式回到这个问题上。事件
软件实体(类、模块、函数)应该是能够扩展的,可是不可修改的。开发
在许多方面,OCP都是面向对象设计的核心所在。遵循这个原则能够带来面向对象技术所声称的巨大好处(也就是,灵活性、可重用性以及可维护性)。然而,并非说只要使用一种面向对象语言就是遵循了这个原则。 对于应用程序中的每一个部分都肆意地进行抽象一样不是一个好主意。正确的作法是,开发人员应该仅仅对程序中呈现出频繁变化的那些部分作出抽象。 拒毫不成熟的抽象和抽象自己同样重要。扩展