一般来说,如果你想构建一个好的软件系统,你应该从编写整洁的代码开始。毕竟,如果建筑中使用的砖质量不好,框架可以发挥的作用就非常有限。相反,如果一个建筑的建筑设计不好,用质量好的砖是没有用的。这是SOLID设计原理要解决的问题。
SOLID原理的主要功能是告诉我们如何将数据和函数组织成类,以及如何将这些类链接成程序。请注意,虽然这里使用了“类”这个词,但这并不意味着我们将要讨论的设计原则只适用于面向对象编程。这里的类只代表一组数据和函数,每个软件系统都会有自己的分类体系,不管他们是否称之为“类”,其实都是SOLID原理的适用领域。
总的来说,我们为软件构建一个中间层结构的主要目标如下:
让软件容忍被更改
使软件更容易理解
构建可在多个软件系统中重用的组件
之所以在这里用“中间层”这个词,是因为这些设计原则主要适用于做模块级编程的程序员。SO-and-D原理应该直接依附于具体的代码逻辑。这些原则用于帮助我们定义软件架构中的组件和模块。
当然,就像建筑是用好砖建造的一样,使用设计良好的中层组件并不能保证系统的整体结构良好工作。正因为如此,我们在讲完SOLID原理之后,还会继续深入讨论组件的设计原理,并把它们推向高级软件架构。
固体原理有着悠久的历史。早在80年代后期,当我在USENET新闻组(当时相当于今天的Facebook)上和其他人辩论软件设计理念的时候,设计原则就开始逐渐成型。随着时间的推移,一些原则被修改,一些被放弃,一些被合并,一些被增加。它们的最终形式是在2000年左右形成的,但在那个时候,它们是以另一种顺序出现的。
大约在2004年,迈克尔·费哲的一封邮件提醒我,如果这些设计原则被重新排列,它们的首字母可以被排列成固体——这就是固体原则诞生的故事。