软件模块的设计原则——SOLID原则

2020年04月14日 682点热度 1人点赞 0条评论

什么是SOLID原则

在面向对象的编程中,SOLID原则是一种使得软件设计更加容易理解、灵活和可维护的五大原则,主要由著名的软件大师Robert C.Martin (Bob 大叔)在Design Principles and Design Patterns 中提出来的, Michael Feathers 首先用SOLID来概括这五大原则。

应用范围:类、模块、函数

主要内容有:

  • Single-responsibility principle, 单一责任原则

A class should only have a single responsibility, that is, only changes to one part of the software's specification should be able to affect the specification of the class.

一个类应当是单一责任的,一个类或者模块应该只有一个职责,也因此有且只有一个原因引起类、模块或者函数的变更。

我的理解: 与“高内聚、低耦合”的要求一脉相承,合理设计类的职责的粒度,避免一个类(和函数)承担了过多的需求,导致各种需求变更的时候都需要改这个类,这样将会带来很严重的维护问题。

  • Open–closed principle, 开闭原则

"Software entities ... should be open for extension, but closed for modification."

对扩展开放,对修改封闭。

我的理解:一旦完成,类的实现只应该因为错误而修改;新的或者改变的特性应该通过新建不同的类来实现(扩展)。新建的类可以通过继承的方式重用原先的代码,但是不必拥有和原先相同的接口。

拓展: 多态开闭原则(使用抽象化接口,要求重用接口,但是不必重用实现,已经存在的接口对修改封闭,并且新的实现必须实现该接口)

  • Liskov substitution principle, 里氏替换原则

"Objects in a program should be replaceable with instances of their subtypes without altering the correctness of that program." See also design by contract.

用子类对象替换基类对象不会改变程序的正确性。

  • Interface segregation principle, 接口隔离原则

"Many client-specific interfaces are better than one general-purpose interface."

对于接口而言,多个客户端特化的接口比一个通用的接口要好。

理解:对于一个已经存在的接口interface,不要通过添加函数的方式使它有新的功能,应当创建新的接口,并且让自己的类在需要的时候实现多个interfaces.
形象来说: 把改锥、刀子、开瓶器、指甲刀等作为单独的接口比设计一个瑞士军刀一样的接口要好,这样对于每个实现类,可以根据需要实现对应的接口,而不需要的接口不应该被强制依赖。

  • Dependency inversion principle, 依赖倒置原则

One should "depend upon abstractions, [not] concretions."

含义: 高层的模块不应该依赖底层的模块,而应该依赖抽象; 抽象不应该依赖实现细节,实现细节应该依赖抽象。

理解: 这是一种对软件模块进行解耦的原则。遵循这一原则的常用设计模式为“IoC”(控制反转), 技术为“依赖注入

补充:迪米特法则(Law of Demeter)

迪米特法则(Law of Demeter,LoD)又叫作最少知识原则(Least Knowledge Principle 简写LKP),是一种软件开发的设计指导原则,特别是面向对象的程序设计。Law of Demeter 定律是松耦合的一种具体案例。该原则是美国东北大学在1987年末在发明的,可以简单地以下面任一种方式总结:

  • 每个单元对于其他的单元只能拥有有限的知识:只是与当前单元紧密联系的单元;
  • 每个单元只能和它的朋友交谈:不能和陌生单元交谈;
    只和自己直接的朋友交谈。

这个原理的名称来源于希腊神话中的农业女神,孤独的得墨忒耳。

Ref

  1. https://en.wikipedia.org/wiki/SOLID
  2. 结合例子理解: https://itnext.io/solid-principles-explanation-and-examples-715b975dcad4
  3. https://en.wikipedia.org/wiki/Law_of_Demeter

Charles

Stay hungry, stay foolish.

文章评论