在软件开发领域,解耦这个词相信大家都不陌生。在面向对象的语境下,我们会应用SOLID原则来构建高内聚低耦合的应用,实现模块间的解耦;在复杂业务系统分析和建模时,会通过DDD的战略和战术设计帮助划分领域并实现分布式系统中服务的解耦;当我们在组织大型敏捷开发团队协同工作时,通过组建自治团队来减少摩擦,从而实现团队级别的解耦。
可以看到解耦无处不在,并且以此为目的投入,大家都会觉得是无比的政治正确,因为实现了解耦,我们的系统和应用就能更快速的扩展和演进,我们的团队就能更顺畅的合作并能更加快速的实现业务价值。
但是,当我们暂时抛开将得到的种种好处,思考要如何去实现它时,却发现解耦这个词表达的意义过于抽象和模糊,它既没有描述最终的状态也没有提供实现的方法。那当我们谈解耦的时候,具体内容是什么呢?
从字面上理解的所谓耦合,通常是指两个或两个以上的物体或者体系之间相互作用彼此影响,对应到软件研发的以上场景,我们可以转换成是指两个或两个以上的模块/系统/团队之间相互作用彼此影响。
在软件需要解决的业务问题越来复杂的今天,单个的系统或者团队很难在不依赖外部的情况下去实现业务目标,