“云时代架构”经典文章阅读感想二
(分布式系统的关注点:高内聚低耦合)
你是否经常有这种感受?但你在写一个系统时有一个类甚至是一个函数出现了一点错误然后但你轻微修改了一个函数时,整个整合好的系统便全面奔溃的状况。这种状况出现的原因便是因为你的系统高耦合的原因。
在设计模式中进场提到的便是“高内聚,低耦合”这个词,设计模式中所提到的23中设计模式便是为了追求系统高内聚低耦合的编程思想设计的。
那么什么是高内聚低耦合:内聚是从功能角度来衡量模块之间的联系,一个好的内聚模块应但是恰好只做一件事。他描述的是模块内的功能联系。耦合则是软件结构中各个模块之间相互连接的一种度量,耦合强弱取决于接口的复杂程度、从进入或者访问一个模块的点以及通过接口的数据。
分布式系统的本质是分治和冗余。分治就是指分解——治理——归并的三部曲。“高内聚低耦合”的概念便是由来与此。其中特别主义的便是分解环节,但你在做分解这个操作时,特别要注意的是不同分支上的子问题,不能相互之间依赖,都是相互独立的一件事。但你的项目越符合高内聚低耦合这个标准时所需要花费的维护成本就越低。
如何做好高内聚低耦合:思路为:定职责、做归类、划边界。定职责就是规定好每一个模块要实现什么功能,让“一个人只做一件事”。定好职责之后便要进行做归类,做归类要求你梳理不同模块之间的依赖关系。
归类可分为三个层次:
1基础层:包括一些基本的功能。作为三层的最底层要求实现的是简单的数据访问功能。
2聚合层:作为承上启下的一层要求将一些数据操作进行整合处理。
3接入层:接入提供的API接口、
最后就是实现划边界的思路规划。设立好之前的职责、归类划分设立出清晰地边界,以免被越界造成混乱。
高内聚,低耦合的系统有什么好处呢?事实上,短期来看,并没有很明显的好处,甚至短期内会影响系统的开发进度,因为高内聚,低耦合的系统对开发设计人员提出了更高的要求。高内聚,低耦合的好处体现在系统持续发展的过程中,高内聚,低耦合的系统具有更好的重用性,维护性,扩展性,可以更高效的完成系统的维护开发,持续的支持业务的发展,而不会成为业务发展的障碍。
可以看出高内聚低耦合其实并没有名字那么高大尚,可能你现在正在做的项目甚至是一个函数的设计中都能体会出高内聚低耦合的思想。
从这次阅读高内聚低耦合的设计思路中我感觉到的是其实从古至今来看,不论是人还是动物,也无论做任何事,都离不开的是“分而治之,以及一个人只做一件事”的思想。软件工程也需要有这种思想——“分而治之,以及一个人只做一件事”而且要始终深记这一思想。