Go 编程语言中的 SOLID 原则
当时大家正在讨论 Go 编程语言中的 SOLID 原则,我也发表了自己的看法。写完之后,我对自己提出的观点感到惊讶。
这就是为什么在 Go 语言中你不应该过多考虑 SOLID 原则的原因:
请考虑以下各项原则:
单一职责原则:
“一个班级应该只承担一项职责……”
Go 语言没有类。这个原则本身就不适用……
我这么说有点讽刺意味,因为结构体当然有点像类,单一职责原则(SRP)对 Go 的结构体类型来说当然很棒,但同时,由于 Go 的结构体类型不支持继承,我们不会遇到类继承行为的情况。因此,我们不必担心意外继承的职责。在 Go 中实现单一职责原则更容易。
开闭原则:
“软件实体……应该允许扩展,但不允许修改。”
没有继承,因此也没有扩展。Go 语言天生就具备这个特性。
里氏替代原理:
“程序中的对象应该能够被其子类型的实例替换,而不会改变程序的正确性。”另见契约式设计。
Go 语言没有子类型。太好了!所以这只适用于接口的实现。是的,这对于接口实现来说是绝对必要的。
界面隔离原理:
“多个针对特定客户端的接口比一个通用接口要好。”
这是非常地道的Go语言表达,无需赘言。
依赖倒置原理:
我们应该“依赖抽象概念,而不是具体事物”。
这其实就是接受接口的另一种说法。是的,我们在 Go 语言中非常重视这一点。
总而言之:
我们在 Go 中思考问题的方式略有不同,因为 Go 不是面向对象编程,但一旦转换成 Go 的类型系统,SOLID 原则就与 Go 的惯用法完全吻合。