一文讲透 “中间层” 思想

操作系统, 利用添加中间层的方式, 达成软件与硬件的连接;Java虚拟机, 借助增添虚拟机层, 促成Java平台的跨平台特性;分布式缓存, 依靠增设中间缓存层, 达成不同应用间的缓存共享;分布式锁,凭借增加中间层锁机制, 实现跨机器的并发管控;分库分表中间件, 通过增添中间层去封装分库分表逻辑, 进而降低复杂度;消息队列, 经由中间层达成削峰以及异步功能;代理服务, 以中间层代理的形式, 完成对目标服务器的访问功能;中介者模式, 依靠增添中介者中间层, 从而降低对象间直接通信, 减少对象耦合并提升系统灵活性与可维护性;领域驱动, 借助增加中间的领域层达成核心业务稳定性, 提高内聚并降低耦合。 在软件工程领域,通过中间层来解决问题的例子还有很多很多。
生活里头, 能够展现“中间层”的实例也是俯拾皆是。比如说, 借助支付宝达成支付, 经由淘宝达成购物, 凭借滴滴达成打车, 依靠饿了么达成购买外卖, 借助翻译软件或者翻译人员达成不同语言之间的交流, 通过熟人介绍对象等等。
当下, 在官网之上, GPT - 4也能够支持调用DALL·E3, 借助自然语言来开展绘图操作, 这同样展现出了“中间层”的思维观念。

中文用户可以通过简单的中文自然语言描述生成比较满意的图形。

存在这么一个“中间层”, 哪怕当前用户所提供的用来输入的是相对简单的中文自然语言提示词, 它也能够将其转变成为DALL·E3模型所需要的英文专业复杂提示词, 如此一来就把用户使用该模型时的门槛给降低了, 这对于用户来讲是极为友好的。
三、为什么"中间层"思想那么有效?
在我看来,“中间层” 和“任务分解” 有异曲同工之妙。
“中间层” 是一种具体运用, 它采用 “任务分解”, 把复杂问题分解成更简单、更具体的子任务, 目的是降低问题的复杂度, 并提高问题解决的效率以及质量。

因为 “中间层” 起到了 “隔离” 作用, 所以它能降低复杂度, 又由于 “中间层” 起到了 “桥梁” 作用, 使得不同层次或组件之间有了清晰的边界, 还让不同层次或组件之间有了互动方式。
四、我们该怎么做?4.1 学以致用
仅有能够做到“学以致用”, 也就是能把所学的这知识用以去解决实际出现的问题, 这般我们学习的知识才会具备价值。

4.1.1 辅助理解知识
鉴于“中间层”观念于计算机范畴有着极为广泛的运用, 当我们开展学习, 或者再度温习某些计算机专业基础内容, 研习中间件, 探究设计模式之际, 要主动思索当下所学知识是不是借助“中间层”用以解决问题的, 说不定在某一时刻就能领悟本质从而“恍然大悟”。
比方说, 在我们开展学习领域驱动之际, 我们能够发觉和“中间层”思想相当契合。进而能够思索, 凭借它运用中间层的思想解决了怎样的问题, 产生了哪些益处。
领域驱动解决的问题:
解耦: 领域层将业务逻辑从诸如 UI 层以及数据访问层等其他层里分离出来, 进而降低了各层之间的耦合程度。可维护性: 业务逻辑集聚在领域层, 致使代码相较于之前更便于维护以及测试。可重用性: 领域层当中的业务逻辑能够在不同的应用和系统里进行重用。易于理解: 借助使用领域特定的语言, 使得业务逻辑理解起来更为容易。
领域驱动带来的好处:
敏捷开发, 因业务逻辑与其他层分离解除耦合关系, 进而更易于适应需求的变化。团队协作, 运用领域特定语言, 能够起到助力提升开发者与业务人员之间沟通效率的作用。高质量代码, 领域层着重强调软件质量, 类似于代码具备可测试性以及可扩展性这样的特性。提高生产效率, 借助模式和设计原则, 像工厂模式、策略模式等等的展开运用, 领域层开展开发能够实现速度更快的效果。
比如说, 当我们去学习“装饰器”设计模式之际, 同样能够依照这种模式来展开思考。而学习适配器模式也好, 或者是代理模式也罢, 以及中介者模式等等, 亦是如此。
装饰器模式解决的问题:
装饰器模式能让你在原始类代码不做修改的情形下, 为其增添全新功能, 这符合开闭原则, 与此同时, 每个装饰器仅聚焦极为特定的一种功能拓展, 如此一来类的设计会变得更具模块化, 这体现了单一职责原则, 并且它具备灵活性, 能够在执行过程之中去动态添加功能或者是移除功能 的。
装饰器模式带来的好处:
可维护性方面: 新的功能采取添加新的装饰器类的方式得以实现, 鉴于此, 在进行单元测试以及实施维护时, 会更具便利性。可复用性方面: 装饰器属于独立的对象, 它针对不同的场景以及对象, 能够予以重复利用。可扩展性方面: 新的功能借助添加新的装饰器便可轻易达成, 根本无需对现有的代码作出修改。粒度控制方面: 装饰器模式给出了一种功能扩展方式, 其粒度更为精细, 你能够选定仅仅针对某个特定对象实施装饰, 并非是针对整个类。
通过引入装饰器这个“中间层”, 装饰器设计模式在让原有对象保持不变的情形下, 提供了一种具备灵活性以及可扩展性的方式用以增添对象的功能。这一举动不但对代码保持整洁与可维护性有益, 还提升了代码的可复用性以及可扩展性。
又如, 我们在学习API网关之际, 同样能够依照这般的模式予以思索。API网关展现了 “中间层” 的理念, 缘由于它是存在于微服务架构, 又或者是其他服端架构同客户端之间的, 充任着一介中介层级去实施管理以及路由请求的角色。API网关一般会给出一系列的功能, 涵盖了请求路由, 负载均衡, 身份验证, 授权, 缓存等。
API 网关解决的问题:
互不相干: API网关让客户端与服务端的交互更趋互不相干, 便是在于那个客户端没必要知晓后端服务确所在之处以及达成详情与细节。集中予以管理: 一切进出的请求都会经由API网关, 如此一来便于展开监控、日志记录以及安全控制等一系列操作。协议实现转换: 正是API网关能够担当起将外部的HTTP/REST请求转化为内部所使用的其它协议(像gRPC、MQTT等)这样的职责。具备灵活性: 能够依据所需动态地去改变路由规则, 增添全新服务或者实施版本控制。
API 网关带来的好处:
简化客户端, 因 API 网关给出统一入口 , 客户端实现会更简单。提高安全性 , 集中来做身份验证和授权 , 对系统安全控制更易。提高可维护性 , 集中管理让代码和配置维护上更轻松。性能优化 , API 网关一般含缓存 、限流 、熔断这类功能 , 助于提升系统整体性能。
依靠这一种思考的模式, 更易于抓牢那种问题的本质, 更妥善地领会相应的概念。
4.1.2 辅助解决问题

我们在理清需求之后, 要去设计技术方案, 当碰到很难理解的问题情况下, 能够主动去思索是不是能够借助增添“中间层”来处理当下所面临的问题, 有时会产生“奇效”。
4.2 没有银弹
计算机科学家弗雷德·布鲁克斯, 有关于“没有银弹”概念, 是其在经典论文《没有银弹: 软件工程的本质性与附属性工作》中所述。此概念指不存在单一技术或方法, 能解决软件工程所有问题, 也无法在短时间大幅提升软件工程生产力。软件工程工作复杂且艰难, 多种技术与方法需综合运用以应对各类问题。

其中提到, 解决一个问题, 有可能致使别的问题油然而生, 或者让原本的问题愈发严重, 即在《解决问题的艺术》里有此表述。所以, “中间层”思想并非“银弹”, 并非无所不能, 当我们运用“中间层”思想去解决问题之际, 要思索“会产生什么副作用”, 权衡好利弊得失。
五、总结
本文对“中间层”概念予以介绍, 从软件工程范畴给予诸多能展现“中间层”思想的例子, 由此帮大家理解这点。又从生活领域给出好多可呈现“中间层”思想的实例, 以此助大家领会这个概念。盼大家切实达成学以致用之态, 凭借“中间层”思想来辅助我们解析知识。亦凭借“中间层”思维来辅助我们攻克难题。另外咱们还得牢记“没有银弹”。而且每件事皆“有利就有弊”, 处于运用“中间层”思想去解决诸多问题之际, 仍旧需仔细斟酌各种利弊, 进而做出最为适宜的选择。
openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构
更多推荐


所有评论(0)