高内聚与低耦合的概念说实话,对本人来说每次提起来总是有些模糊,下午看了一些博主的文章,感觉清晰了一些,在此记录一下个人的理解。
首先感谢几位老哥的文章,如下:
https://blog.csdn.net/qq_39521554/article/details/79489180
https://www.cnblogs.com/corvoh/p/5747856.html
https://blog.csdn.net/kingscoming/article/details/78836229
内聚:
每个模块尽可能独立完成自己的功能,不依赖于模块外部的代码。
个人理解:
关于内聚,本人觉得四个字“单一职责”,不管是方法(函数)、类,还是自定义的组件。
比如某个类应该只做它本身做的是,也不应该做过多的事情。比如计算模块,该模块应该只是做计算的事情,而不应该与付款模块发生内容耦合或者说直接耦合之类,
说实在点就是在计算模块中不应该有付款之类的代码存在,计算就应该只是做计算的事情,反之亦然。
那么计算模块中应该有各种类,比如计算加减法的,计算平方的,计算平方根的(举个例子,可能实际工作中就是一个工具类)
那么计算加减法的类中就只是计算加减法,包括到方法中去,加法就计算加法。如果要实现一个复杂的计算比如要加,然后计算平法,然后再减的逻辑,应该在主模块中进行调用。
最终暴露给其他模块的接口不影响付款,具体算法是什么样的,是计算模块说了算,付款模块并不需要关注。
在主模块中调用计算模块的接口,然后再调用付款模块的接口,那么它们只是有非直接耦合的关系。
耦合:
模块与模块之间接口的复杂程度,模块之间联系越复杂耦合度越高,牵一发而动全身。
个人理解:
内聚有耦合有着千丝万缕的关系,如果内聚度较高,那么耦合程度必然会有所降低,反之,内聚度低,耦合度响应的也会出现一定上升,但又不一定是必然的。
比如有一个类同时既有计算又有付款,内聚松散,等于2个功能整合为一个功能。那么可以直接把付款类去掉了。
然后主模块中关于计算付款只要调用这一个类中的函数即可,那么是不是整体的耦合度降低了?但是牺牲的是内聚性。
总结:
所有本人感觉,如果要达到高内聚,那么在敲代码之前,势必要多花一些时间研究模块的拆分,不管是横向的还是纵向的,
以上大多都是个人理解,欢迎拍砖