不要过分解耦了

最近一年半时间在高强度、集中性的做客户端所谓架构方面的工作。这些比代码更抽象的东西很少有人聊到,也很难搜索和交流,会陆陆续续写一些思考。

关于耦合

每一个程序员在接受中等甚至初级培训的时候都会被不停的灌输一个概念:耦合是坏的。但是,耦合的来源是什么?解耦的目标是什么?什么样的耦合是不好的?这些似乎没有人提过。

耦合的来源是什么

耦合通常来自两个方面:

  • 代码写挫了。主要包括:
    • 耦合边界不合理,导致很多相互调用的逻辑
    • 不该复用的地方硬生生搞复用
    • 不合理使用继承等扩散内部细节的手段进行复用
    • 层级设计不合理
    • 等等
  • 业务上天然存在的耦合,比如首页就是要打开详情页,二者是天然要耦合的。
解耦的目标是什么

解耦和客户端架构的目标是一致的,都是为了又快又好的进行业务开发。不好的耦合一方面会导致代码难以读懂(修改困难)、依赖非常复杂(打包慢);另一方面会导致单点错误或者修改传递到不希望修改的部分(其实是复用的问题,导致隐藏 bug)。所以要把不好的耦合解掉。

什么样的耦合是不好的

当然是代码写挫了这种。

物理和逻辑耦合
  • 物理耦合
    代码上的真实依赖。反映到文件上非常明确:代码调用、继承、持有都算是,这些耦合简单来说都可以靠自动化的静态分析搞定。
  • 逻辑耦合
    A 依赖 B 的执行状态、修改的全局状态、逻辑上需要使用 B 都算是,通常是不太容易用静态分析搞定的。

所以我的态度来了 耦合是有物理耦合和逻辑耦合之分的,解耦的上限应该是逻辑耦合。如果只是将物理耦合解掉,逻辑耦合不动,那这个解耦一定是有害的!

想喷的现状

这个文章的来源是在面试过程中,甚至是大厂开源的框架里,嗅到了一股浓浓的没想好就瞎解依赖的味道。
看现在的几乎所有路由框架,都在做什么?用字符串 + 参数 map 的形式把跳转“解耦”掉,甚至有人把方法调用都做成了字符串 + 参数 map 的形式!硬生生把必须存在的(逻辑+物理)耦合用这种方式干掉了物理耦合。逻辑耦合仍然存在的情况下,这种解耦的效用是什么呢?
完全不可维护,以及繁重的线下沟通工作!
Java 可能少数几个优势就是强类型,这种解耦一下子就把强类型转成了弱类型。编译没毛病,一跑崩成狗。如果喜欢这种感觉请去写 groovy,请尽可能的使用环境变量,请尽量搞一万个全局 flag。所以,这种写法根本没法修改接口!接口的修改必须靠非代码的方式进行全局的传播,在一个超过50人的团队里,这个一定是会出 bug 的。而且接口的定义必须是用文档维护的(否则就得共享所有代码),这个额外成本根本是在浪费。
如果想解耦,请把逻辑耦合用合理的方式去掉;把去不掉的耦合用最明确、最代码的形式以物理耦合的方式暴露出来,用代码库做程序员沟通的手段,用编译尽早发现问题!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
RabbitMQ是一个开源的消息中间件,它实现了高效的消息传递机制,可以在分布式系统中实现解耦和异步通信。通过使用RabbitMQ,不同的应用程序可以通过发送和接收消息来进行通信,而不需要直接依赖于彼此。 解耦是指将应用程序的不同部分解开,使它们能够独立地进行开发、测试和部署。在分布式系统中,解耦是非常重要的,因为它可以降低系统的复杂性,并提高系统的可扩展性和可维护性。 RabbitMQ通过使用消息队列的方式来实现解耦。应用程序可以将消息发送到RabbitMQ的消息队列中,而不需要直接与其他应用程序进行通信。其他应用程序可以从队列中接收消息,并进行相应的处理。这种方式可以使应用程序之间的通信变得松散耦合,每个应用程序都可以独立地进行开发和部署。 RabbitMQ提供了丰富的特性来支持解耦和异步通信,包括以下几个方面: 1. 消息队列:RabbitMQ使用消息队列来存储和传递消息。消息队列可以缓冲发送方和接收方之间的消息,使得它们可以独立地进行工作。 2. 发布/订阅模式:RabbitMQ支持发布/订阅模式,可以将消息广播给多个消费者。这样,一个消息可以被多个应用程序同时接收和处理。 3. 路由和交换机:RabbitMQ使用交换机来路由消息。通过定义不同类型的交换机和绑定规则,可以将消息发送到指定的队列中。 4. 消息确认机制:RabbitMQ提供了消息确认机制,确保消息能够可靠地传递。发送方可以等待接收方的确认消息,以确保消息已经被成功处理。 5. 可靠性和持久化:RabbitMQ支持消息的持久化,即使在服务器故障或重启后,消息也不会丢失。它还提供了可靠性保证,确保消息能够按照指定的顺序进行处理。 6. 扩展性和高可用性:RabbitMQ可以通过添加多个节点来实现扩展性和高可用性。多个节点可以组成一个集群,提供更高的吞吐量和可靠性。 总之,RabbitMQ是一个强大的消息中间件,可以帮助应用程序实现解耦和异步通信。它提供了丰富的特性和灵活的配置选项,适用于各种不同的应用场景。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值