软件设计的“七宗罪”:
僵化 rigidity:导致软件的可变性差
脆弱 fragility:导致软件容易崩溃
固化 immobility:导致软件课重用性差
黏滞 viscosity:导致软件很难正确运行
非必要复杂 needless complexity:导致软件过分设计
非必要重复 needless repetition:导致软件更有可能产生 error
不做设计
软件设计七大原则:
SOLID:SRP:Single Responsibility Principle,单一职责原则
OCP:Open-Close Principe,开闭原则
LSP:Liskov Substitution Principle,里氏替换原则
ISP:Interface Segregation Principe,接口分离原则
DIP:Dependence Inversion Principle,依赖倒置原则
other:CRP:Composite/Aggregate Reuse Principle,组合/聚合复用原则
PLK:Principle of Least Knowledge,最小知识原则
软件设计原则的目标:提高软件的可复用性、灵活性、可扩展性和可维护性。<我自己写的>
一、SRP(Single Responsibility Principe):单一职责原则
定义:从软件变化的角度来看,就一个类而言,应该仅有一个让类发生变化的原因。
Description
单一职责原则及内聚性(Cohesion),表示一个模块的组成元素之间的功能相关性。单
一职责可以提高内聚降低耦合,多职责会提高耦合降低内聚。高内聚低耦合是设计师追求的
理想,低内聚高耦合会导致模块灵活性、可复用性、可扩展性和可维护性降低。
两个职责是否应该分开,取决于它们是否共同变化。
SRP 核心
SRP 是一个简单直白的原则,但实际上有时候很难达到。在抽象层面,正确的抽象是实
现 SRP 的关键点。在实现层面(代码层面),将不同职责的代码放到不同的类中,通过调用的
方式来使用不同的职责。
二、OCP(Open-Close Principe):开闭原则
定义:软件实体(类、模块、函数/方法等等)对于扩展应该是开放的,对于修改应该是封闭
的。(软件实体应该可扩展的,但不可修改。)
可扩展:通过增加新的模块来满足新的需求。
不可修改:不能为了新的需求而修改已经完成的模块。
优点:通过扩展当前的系统,软件产品可以提供新的功能来满足用户新的需求,因此软件产
品有良好的可变性和灵活性。
已经实现的模块中,尤其是最关键的抽象模块,这些模块都经过了精心的测试,所以不
能更改,因此软件产品具有良好的稳定性和持久性。
OCP 的实现:(rely on:Abstraction,Polymorphism (多态),Inheritance,Interface)
接口和抽象类是固定的抽象,但有很多可能的行为,每种行为可能有多种实现方式,这
些行为由已实现的类或继承的类来表现。
一个接口是可扩展的,因为它有各种灵活的实现方式。
一个接口是不可修改的,因为它是预定义好的。修改接口会在其实现中带来很多级联更
改。