架构整洁之道二(设计原则)

前言

好的系统,应该从写整洁的代码开始。再好的架构设计,要是使用的砖头质量不佳,那造出来的就是危房。
一些老牌的设计原则,这里了解一下。编码时,我们未必经常会使用,但还是应该牢记于心。有了这些
内功心法(设计原则),至于什么招式(设计模式)那都是一通百通的,一变百变的。

SOLID原则

SOLID是指:SRP(单一职责原则)、OCP(开闭原则)、LSP(里氏替换原则)、ISP(接口隔离原则)、
DIP(依赖反转原则)。下面就听我随便瞎聊聊。

SRP(单一职责原则)

正如天下武功为快不破一样。这个原则是最简单,但也是最难把控的。什么叫单一。我觉得应按实际情况来
做分析。如果把人比做是一个系统。当系统还没到很复杂的时候。也许我们会把,用手处理的运动(
例如:打羽毛球、打乒乓球)归为一类行为。但当我们把这个人做的更精致的时候,也许我们就会把
用手打一种球类运动归为一类行为。所以什么是单一,应该在现有的系统基础上,以及现有的人力资源
上,把功能尽可能的划分单一。毕竟分类越细,所要创建的模块会越多,那自然维护的成本也就会越高。
所以,对SRP的最终描述我觉得应该是这样的:

任何一个软件模块都应该只对一类行为负责。而现有的系统规模和人力资源来决定这一类到底可以分的多细。

OCP(开闭原则)

对于开闭原则,我觉最有用,也是最好去实践的。相对官方的定义是这样的:

对修改关闭,对扩展开放

什么意思呢,其实很好理解。需求是永远会变动的。所以,我们在编码时,只要牢记一个原则:

我写的代码,假如有一天,有新的需求增加或者调整(修复BUG不算),我只需要额外加一些类就可以搞定

的,而不是去修改原来的代码来满足未来可变的需求。

换句话说,我不管你用什么黑科技,怎么设计,只要后面的需求来了,不要让我去修改原来的代码,
那么你的设计就是好的设计。所以什么面向接口编程,抽象与实现的分离,SPI插件机制,工厂模式等等
这些招式都是在处理这个原则。

LSP(里氏替换原则)

这个原则也是比较好处理的。简单的理解,就是对继承或者接口实现进行了约束。通俗的讲,可以这样
解释:

我们申明一个接口或者抽象类,分别有A、B、C三种实现。当上层在使用这个接口时,无论我使用ABC中

的任何一个实现,上层的功能都是可以良好合理工作的。

上面的定义还是不明白,没关系。我举个列子。例如,我们申明了一个"鸟"做为基类。其中有个fly的方法。
我们用啄木鸟或者布谷鸟去实现,那是没问题的,他们都能实现飞的动作。但是如果我们用鸡去实现,发现fly这个方法无法实现,
于是就提示说这个方法不支持。这样鸡的实现就违反了LSP原则了。因为当我们系统用鸡的实例去替换时,
发现不能fly,那不就悲剧了么。

ISP(接口隔离原则)

先抛出一句话,看能不能理解:

任何模块或者层次的软件设计,如果依赖了他不需要的东西,那都是有害的

具体举个例子来解释:例如我们有个类,其中有3个方法:方法1、方法2、方法3。而我们的模块a功能只需要方法1,模块b功能只需要方法2,
模块c功能只需要方法3。如果我们使用同一个接口,包含这3个方法去编码,那么势必,在模块a的功能上虽然没有用到方法2和方法3,
但也是被依赖了,假如有一天,方法2或者方法3被修改了,虽然模块a没有使用,但也必须需要重新编译了。因此,我们应该把这3个方法,
拆分成3个不同的接口,各自模块只依赖对应的接口。这样任何其他方法被修改了,都不会影响当前模块。这就是所谓的接口隔离原则。

换一句比较术语化的说法意思都是一样一样的:

客户端不应该依赖它不需要的接口;一个类对另一个类的依赖应该建立在最小的接口上。

DIP(依赖反转原则)

这个大家应该熟悉的不要不要的了。Spring就是靠IOC(控制反转)出道的。其实这个原则也很简单:

我们编码时,要尽量依赖一些稳定的抽象层,而不要去依赖容易变动的实现层

接口往往比实现更加稳定,所以我们要基于依赖接口编程,不要依赖具体实现。那么要怎么实现不依赖具体实现,就是上面说的控制反转。
我们都知道,Java里面接口是不能new的,需要有一个具体实现类来构建实例再向上转型到接口引用。所以这里有一个常见的做法,就是
使用工厂设计模式,创建一个工厂,专门用来实例化这些实例。这样我们的模块里面只依赖了相对比较稳定的工厂类,而不是具体接口的实现
类。像Spring的IOC,也是利用类似模式,只不过他做的比较强大健全而已,构造了一个容器来管理这些实例,并设置了很多扩展点,让我们
方便的干预实例的创建。

总结

正如上面所说了,这5大设计原则就是内功心法。武侠小说都看过吧,光有内功心法其实是不够的。还需要学一点招式,就是所谓的设计模式。
但内功的深厚最终决定你能走多远。最后,真正的大侠,是需要在实战中磨练的。最后形成一套属于自己的拳法,例如:黯然销魂掌。但内功
心法是你的起步,需要时刻牢记。

相关推荐

https://www.atatech.org/articles/128443

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值