美文网首页
程序员修炼27 解耦与微服务

程序员修炼27 解耦与微服务

作者: 大笑的篷蒿人 | 来源:发表于2022-02-19 18:04 被阅读0次

本来想针对前灯的话题再展开一点的,不过想想觉得自己对于前灯的理解基本上没有什么问题,也挺认同这个观点的,还是继续下一个话题。解耦

解耦是我非常期待的一个话题,我们很多时候觉得代码不够清晰,很大的一个原因就是分子太多,又不必要的依赖。

我先说说对于解耦我的理解,从物理世界来看,从小小的原子到完整的生物体乃至整个世界,实际上都是基于高内聚低耦合的原则组合而存在的。

从最小的原子就遵循这个原则,原子内部存在相互作用,但是原子之间的相互影响就弱很多。
然后原子与原子组合成为分子,这是更上一层的组合,依然遵从了这个原则,分子内部的作用远大于分子与分子时间的作用。
分子在组合成细胞,
细胞在组合成器官,
器官在组合成生物体(人),

人和人组成家庭,
家庭和家庭组成城市,
城市和城市组成国家,
国家和国家组成世界(星球),
星球和星球组成星系,
星系和星系组成宇宙。
每一层的组合都非常默契的遵从了高内聚低耦合的原则。

也就是要是把高内聚低耦合的思路贯彻好,用程序构建一个宇宙也不是问题。

和上面分层解耦构建世界的方式相似,代码里也存在分层解耦的情况,比如一些编程语言自带的工具和方法,你可以把它们看成是原子,他们之间本身已经解耦了。在上面一层是你利用这些工具搭建出的有业务含义的方法,这些业务方法和类构建出一个小的细分领域,多个细分领域构建出完整的系统。

先说一下这个细分领域到系统这个层次的解耦,这个其实是挺难的,他比较像是物理世界中把器官搭建成人体这一个层次。这一个层次的划分就没有其他层次这么清楚,“上帝”在造人的时候虽然也遵从了这个原则,但并没有其他层次那么清晰。这就造成了有可能你感到手麻,实际问题却出现在颈椎。你觉得头能,可能真正的问题是血压高。

虽然难,但还是应该尽可能去做,那么在这一层次解耦的关键是什么呢?我觉得无非是两点,一是在哪里切入解耦,二是如何保证解耦。这两点分别对应到产品设计和代码实现两个层面。

产品设计要明确切在哪里,比如我们的订单,运单,运输安排,预约,应收,应付,进出款申请,这一个流程下来应该切成几块?哪些适合在一起?哪些适合拆开?

代码实现其中一种方式就是微服务了,他保证我们没有办法直接去调用模块内部的方法,比如订单和运单假设是两个微服务,那么订单要改变运单的内容只能是告诉运单要怎么改,而不能直接动手改。

告诉运单怎么改和直接改的区别就是前者是显然的契约式编程了,按照运单暴露的接口来修改运单内容,那么这个契约就可以定义的非常清楚,不论是调用方还是被调用方都是一种一切尽在掌握的感觉了。

待续

相关文章

  • 程序员修炼27 解耦与微服务

    本来想针对前灯的话题再展开一点的,不过想想觉得自己对于前灯的理解基本上没有什么问题,也挺认同这个观点的,还是继续下...

  • 20171127-03问题整理

    总摘要: 解耦. 接口降低. 架构. 2017-11-27摘要: 解耦. 接口降低. 架构. 1.为什么说解耦的...

  • MQ问题总结

    一、为什么使用 MQ? 1.1 解耦 1.1.1 解耦1 例如电商系统核心是交易服务,交易服务要调用另外三个服务,...

  • MQ问题梳理转自陈琰AC

    一、为什么使用 MQ? 1.1 解耦 1.1.1 解耦 例如电商系统核心是交易服务,交易服务要调用另外三个服务,订...

  • ActiveMQ与Kafka分析笔记

    activeMQ与kafka比较 前言 消息中间件的主要作用是:解耦、异步、削峰填谷解耦:将接口调用依赖的两个服务...

  • DDD 中的事件总线 (一)

    DDD 为什么需要event bus? 简单的说就是 解耦 ,无论是本地聚合间的解耦,还是微服务间的解耦. 没有e...

  • 微服务迁移之旅

    微服务拆分之道 ——Zhamak Dehghani 原文 解耦何物,何时解耦 当单体系统庞大到无法应付时,大多企业...

  • 命令模式(Command)

    请求发送者与接收者解耦——命令模式(一)请求发送者与接收者解耦——命令模式(二)请求发送者与接收者解耦——命令模式...

  • 基于领域事件实现微服务解耦

    基于领域事件实现微服务解耦 领域事件是解耦微服务的关键。 什么是领域事件 除了命令和操作等业务行为,还有一种非常重...

  • java版b2b2c社交电商分布式微服务Spring Cloud

    微服务架构 Spring Cloud解决的第一个问题就是:服务与服务之间的解耦。很多公司在业务高速发展的时候,服务...

网友评论

      本文标题:程序员修炼27 解耦与微服务

      本文链接:https://www.haomeiwen.com/subject/ekuplrtx.html