软件架构的设计原则
1.开闭原则(OCP):
·一个软件实体如类,模块和函数应该对扩展开放,对修改关闭。
·所谓的开闭,正是对扩展和修改两个行为的一个原则
·强调的是用抽象构建框架,用实现扩展细节。可以提高软件系统的可复用性以及可维护性
·开闭原则,是面向对象设计中最基础的设计原则,它指导我们如何建立稳定,灵活的系统,例如版本更新,我们尽可能不修改源代码,但是可以增加新功能。
·要想达到这样的效果,我们需要使用接口和抽象类
2.依赖倒置原则(DIP):
·是指设计代码结构时,高层模块不应该依赖底层,二者都应该依赖其抽象。抽象不应该依赖细节,细节应该依赖抽象。
·通过依赖倒置,可以减少类与类之间的耦合,提高系统的稳定性,提高代码的可读性,提高代码的可读性和可维护性,并能够降低修改程序所造成的风险。
·他是开闭原则的基础,具体内容:针对接口编程,依赖于抽象而不依赖于具体。
3.单一职责原则(SRP):
·是指不要存在多于一个导致类变更得原因。
·假设我们有一个类负责两个职责,一旦需求发生变更,修改其中一个代码中一个职责的逻辑代码,有可能导致另一个职责的工能发生故障。这样一来,这个类就存在两个导致类变更的原因。
·将两个职责用两个类实现,进行解解耦,后期需求变更维护互不影响。
·可以降低类的复杂度,提高类的可读性,提高系统的可维护性,降低变更引起的风险。
4.接口隔离原则(ISP):
是指用多个专门的接口,而不使用单一的总接口,客户端不应该依赖他不需要的接口。
1>一个类对另一个类的依赖应该建立在最小的接口之上。
2>建立单一接口,不要建立庞大臃肿的接口
3>尽量细化接口,接口中的方法尽量少(适度)
5.迪米特原则(LoD):
是指一个对象应该对其他对象较少的了解,又叫最少知道原则
一个类尽量少的与其他实体之间发生相互作用,使得系统功能模块相对独立。
6.里氏替换原则(LSP):
是指如果每一个类型为T1的对象O1,都有类型为T2的对象O2,使得以T1定义的所有程序P在所有的对象O1都换成O2时,程序P的行为没有发生变化,呢么T2是类型T1的子类型
·可以理解为一个软件实体如果适用于一个父类,那么一定适用于子类,所引用父类的地方必须能够透明的使用其子类对象,子类对象能够替换父类对象
,而程序逻辑不变。
也就是说:子类可以扩展父类的功能,但是不能改变父类原有的功能,任何基类可以出现的地方,子类一定可以出现。
7.合成复用原则(CARP):
是指尽量使用对象组合/聚合,而不是继承关系达到复用的目的。可以使系统更加灵活,降低类与类之间的耦合度,一个类的变化对其他类造成的影响较少。
继承叫做白箱复用,相当于把所有的细节暴露给子类。组合/聚合称为黑箱复用,我们无法获取到类以外的对象实现细节的。