来源:哔哩哔哩
2023-06-25 11:29:30
再复杂的设计,当你将其彻底拆解和分析之后,你会发现其核心实质不过是单一责任原则(SRP)和开闭原则(OCP)的具体应用和实现。
—— lorne
我一直认为单一责任和开闭原则是软件开发设计中的最顶级原则
(资料图片)
单一责任是模块与类设计的第一原则,开闭原则是抽象与拓展的第一原则。
在SOLID中 也是最靠前的两个原则
S 指的是单一责任,O指的就是开闭原则。
L是里氏替换原则,I是接口隔离原则,D是依赖导致原则。
而这三个原则都是对具体操作层面的约束原则。
单一责任,要求我们对类、函数、包、模块都需要遵循单一责任的原则,其目的是为了可维护性与复用行。
可维护性是指,通过将相同的代码维护在一块,可以让功能的封装性更强,同样对于修改维护的时候,也只需要修改一处地方即可。
复用行是指,通过对相同指责代码的封装,从而可以在需要使用这个功能的时候,容易引入进来,从而提升了代码的重复利用率。
开闭原则,要求我们对新增开放,对修改关闭。其目的是为了可维护性与拓展性。
可维护性是指,如果对功能的调整都需要通过修改已有的代码来实现的话,那么将会带来很多的隐患,因为只要是改动过的代码都有可能会存在的问题,因此我们已经尽量的避免修改已有的逻辑,而是通过新增来实现,因为新增代码的话,其影响面只是新代码的影响,而不会影响已有的逻辑。
拓展性是指,想要达成通过新增来实现对已有功能的调整,则需要我们采用一些设计技巧来实现的,例如多态、继承、事件驱动、接口隔离等方式,当你采用这样的方式处理程序以后,自然会带来更强的拓展性与适配能力。
SRP原则,我用两个例子场景来介绍
文件归档能力,如果你需要做大量的文字处理的功能,你想要在写新的文档的时候,使用你之前的文档内容,那么你就需要做好两件事情,1是文件的分类,2是文件的命名与段落的标题总结。如果你能做好这两项能力,那么你在复用你之前的劳动成果的时候,就变得的非常的容易了。
打扫卫生,我认为打扫卫生这个事情,想要做好这个工作,需要的也是两方面的能力,分别是归纳和整齐。归纳是指,我们要把物品做好分类,整齐是指,我们要归纳好的物品排放整齐。满足这两点就说明,就已经是非常成功的打扫工作了。
OCP原则,更多的是考察程序员的抽象能力,只有在运用好抽象能力以后,你才能做好OCP的工作。像是多态、事件驱动、接口隔离更多的是设计者的面相对象的底层设计能力,尤其是多态,OCP想要做好必然会运用多态的技术。
前面说SRP和OCP是设计原则的两大顶级原则,一个是教大家如何归纳分类、一个是教大家如何抽象多态,其实这两大能力也是软件设计中的最重要的能力。
因此想要成为合格的架构师,那么对于这两个设计原则必须要做到牢记在心、熟练应用。无论是多复杂的架构设计,当你把他拆解分析完以后,最终也无非是这两个原则的表现。
关键词: