洞悉本质 | 论软件设计中间加一层的威力

为什么写这个主题?

软件设计中间加一层的解决方案,随处可见。写本文的目的也是因为看到很多场景都是基于这个思想的应用,就想着梳理一下,让大家看到一些本质的内容。

顺便以现今主流的一些技术或概念作为样本,进行拆解,辅助大家理解。

搞清底层逻辑和设计思想,才不会被各种技术名词,技术概念整的一脸懵逼。

现在铺天盖地的三高讲解、培训,千万悠着点学,别整的身体三高了,哈哈,开个玩笑。

但是软件的设计思想层面的东西,编程的一些思考,我们也需学习提升,思考沉淀。学技术不只有三高。

而且思维层面的东西不像学习个具体的技术框架,全身心投入个几天甚至几个小时就能上手使用了。而是需要一点一滴积累,一点一滴思考总结。

看别人的总结也不行,别人的永远是别人的,参考可以,一定要自己总结。

回归主题,今天分享的是「论软件设计中间加一层的威力」 。

正文开始 你熟悉的jvm

先看个jvm得简易执行图。

jvm.png

上图jvm部分是简化后的并不严谨,重点在整体结构上,可以看到,JVM处于class文件与操作系统之间。JVM针对不同操作系统做了实现。不同平台的JVM将class解释为对应平台的机器码执行。

通过在class与操作系统之间加上JVM之后,以后出现新的操作系统,只需要针对对应平台实现一套JVM(JVM的各平台实现是不需要我们关心的,有官方团队处理),项目即可在平台上运行,这便是Java宣称的一次编写,到处运行。到处运行的前提是,到处都需要有JVM的实现。

JVM在这里就充当了一个中间层,隔离了开发环境与操作系统。

隔离的好处是消除了双方之间直接接触带来的相互影响和不适应,这些都在JVM这一层化于无形。

对项目开发人员来说就不用关心底层是什么操作系统,我只对接JVM。操作系统的任何变化、升级都跟我无关,这都是JVM需要考虑的事。

对操作系统而言,也不需要因为要运行你的class而做出任何改变。这也是JVM需要考虑的事。

那些不知道在哪能用上的设计模式

代理模式
算是设计模式中比较简单也比较容易理解的一种,看个图。

代理模式.png

加上中间的代理层后,对调用方来说并不知道实际类的真实情况,这样一方面可以隐藏实际类的信息,另一方面可以在代理层对调用方和实际类进行控制,可以做一些限制操作,又或者添加一些其他的处理逻辑,比如常见的在调用前后输出个日志。而这个处理过程对调用者和实际类来说是无感知的。


外观模式
同样先看个图

image.png


中间加了外观角色这个中间层后,对调用方来说,就变得简单了许多,原来哼哧哼哧调3个,现在简简单单调一个。
其他还有不少,限于篇幅,就不列举了。

消息中间件

这里主要说下用消息中间件解耦的场景,两个服务之间消除依赖,借助消息中间件即可实现,不用消息中间件可以实现吗,完全可以,自己实现一个中间的交换系统没什么不可以,只不过需要投入时间精力,所以大家都用现成的。

此场景下仅仅解耦两个服务之间的依赖其实是没什么可炫耀的,它真正的威力在于加了中间层后将多服务之间多对多的调用结构转换为了多对一结构。

如下图

未命名文件.png

右图比左图清楚的不是一点点,图能看清楚,代码实现就有了写清楚的前提。


网关

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wpjzzy.html