软件设计原则

为了达到代码的复用、可维护性的目的,软件设计需遵循软件设计原则。

单一职责原则(Single Responsibility Principle)

一个类只承担一个职责,不同的类具备不同的职责,各司其职。这样可以降低类的复杂性,实现什么职责都有清晰明确的定义;提高了代码可读性和可维护性;降低了变更代码引起的风险。

里式替换原则(Liskov Substitution Principle)

子类可以扩展父类的方法,但是不应该复写父类的方法。定义为:Functions that use pointers or references to base classes must be able to use objects of derived classes without knowing it。即一个对象在其出现的任何地方,都可以用子类实例做替换,并且不会导致程序出错。这样便要求子类必须完全实现父类的方法;覆盖或实现父类的方法时输入参数可以被放大,输出结果可以被缩小(逆变协变)。采用里式替换原则可以提高程序的健壮性,版本升级时也可以保持非常好的兼容性。

依赖倒置原则(Dependence Inversion Principle)

面向接口编程,提取事物的本质和共性。模块间的依赖通过抽象发生,实现类之间不发生直接的依赖关系,其依赖关系是通过接口或抽象类产生的;接口或者抽象类不依赖于实现类;实现类依赖于接口或抽象类。每个类尽量都有接口或抽象类;变量的表面类型尽量是接口或者抽象类;任何类都不应该从具体类派生,尽量不要复写基类的方法。采用依赖倒置原则可减少类间的耦合性,提高系统的稳定性,降低并行开发引起的风险,提高代码可读性和可维护性。依赖也可以称为注入,一般可以通过构造函数注入,属性注入,接口注入。

接口隔离原则(Interface Segregation Principle)

建立单一接口,尽量细化接口,接口中的方法尽量少。一个接口只服务于一个子模块或者业务逻辑;通过业务逻辑尽量压缩接口中的方法;可以提高内聚,降低耦合,提高系统的灵活性和可维护性。

迪米特原则(Law of Demeter)

也称为最少知识原则,一个对象应该对其他对象保持最少的了解,实现低耦合、高内聚。如果一个对象对另一个对象了解得越多,那么,它们之间的耦合性也就越强,当修改其中一个对象时,对另一个对象造成的影响也就越大。

开闭原则(Open Closed Principle)

Software entities like classes, modules and functions should be open for extension but closed for modifications。类、模块、函数,可以去扩展,但不要去修改,即尽量通过扩展实体行为来实现变化。需要抽象约束,将相同的变化封装到一个接口或抽象类,将不同的变化封装到不同的接口或抽象类中。

组合/聚合复用原则(Composite/Aggregate Reuse Principle)

尽量使用组合/聚合,尽量不要使用继承。组合/聚合复用原则是在一个新的对象里面使用依稀已有的对象,使之成为新对象的一部分;新的对象通过向这些对象的委派达到复用已有功能的目的。

继承复用有缺点:如果基类发生了改变,那么派生类的实现不得不发生改变;而且从超类继承而来的实现是静态的,不可能在运行时发生改变,因此它的灵活性差并最终会限制复用性。

最后更新: 2019年08月29日 16:36

原始链接: freesdw.github.io/2019/08/27/软件设计原则/

× 请我吃巧克力吧
打赏二维码