知乎上有一个提问:编程思想里面,何谓解耦?
↓↓↓
今天,我们就这个话题一起来做个讨论。
我的观点认为:在编程中,解耦意味将系统的各个部分之间的依赖关系降低到最小,使得各部分能够独立变化而不会影响到其他部分。
解耦的目标是提高代码的灵活性、可维护性和可扩展性。
核心思想主要涉及到两个方面:
一、模块解耦:模块解耦指的是将系统分解为更小的、独立的模块或组件,每个模块负责一个明确定义的功能。
这样,当需要修改系统的某个功能时,只需修改与之相关的模块,而不会影响其他部分。
不知道大家有没有听过传统的MVC架构,它将应用程序划分为三个主要部分:模型、视图、控制层。让它们各施其职,相互隔离,彼此的改动,谁也影响不了谁。
这其实本质就是模块解耦思想的体现。
还有我们在实际项目中将各个划分好的独立业务模块(拿电商场景举例,比如用户中心模块、商品中心模块、活动中心模块、订单中心模块等)前期在一个工程中以多Module形式划分或更简单点直接用package划分,其本质都是模块解耦思想的体现。
(多module示例图)
二、时间解耦:时间解耦指的是系统中的不同部分不应该过于依赖彼此的执行顺序。
模块之间的消息传递或调用应该是异步的或者基于事件的,而不是同步的,这样可以使得系统更灵活,能够适应不同的运行环境和需求变化。
后端开发的同学,相信或多或少都应该知道MQ这个东西。我们也知道它的三大核心特性:异步、解耦、消峰。
这里的解耦指的就是时间维度上的解耦。
生产者压根不需要知道消费者应用的存在。它尽管只要往指定通道发送消息即可。消费者应用如果想要数据,订阅就好。
这里我们总结一下解耦的优势:
综上,解耦是面向对象设计和软件架构中的重要原则之一,有助于构建更灵活、可维护和可扩展的软件系统。