首先来看看什么是“低耦合,高内聚”,这里简单介绍一下:内聚描述的是模块内的功能联系;从功能角度来度量模块内的联系,一个好的内聚模块应当恰好完成一个任务。耦合是软件结构中各模块之间相互连接的一种度量,耦合强弱取决于模块间接口的复杂程度、进入或访问一个模块的点以及通过接口的数据。
另外“高内聚低耦合”,也是软件工程中的概念,是判断设计好坏的标准,或许也可以说是设计软件所追求的目标,那么是否就是说离这个目标越近软件设计的就越好呢!如果从可维护性,可扩展性,后续架构来说,能达到这样的标准的确是最好的,目前这也是公认的,但是却很少听到他带来的副作用,下面就来讲讲。
搞破解、逆向工程的都知道,首先需要把一个完整的软件目标二进制代码逆向成为汇编语言所编写的程序,然而却无法逆向回他原来所编写的语言去,或许未来可以,但最起码现在不可以。说到这里,那么他跟“低耦合,高内聚”到底有什么联系呢!大家都知道,编译器在把源程序代码翻译为汇编语言的时候,其实整体结构是没有多大变化的,比如C中一个函数翻译成汇编后,大体上还是具有一个函数的形状的;那么重点就来了,如果源程序代码过度“高内聚低耦合”就会对逆向工程及破解等带来好处,源程序在翻译为汇编代码后大致结构上也会遵行“高内聚低耦合”,那么逆向起来是不是就比不遵行(当然有点极端)“高内聚低耦合”来的快一些,那对破解来说也是有很大好处的,如源程序的某个关键函数就是破解的关键点,如果源程序过度“高内聚低耦合”,是不是只要把这个关键函数解决了,破解就成功了;然而大多数软件破解中也是这么回事。如果源程序关键函数不是过度的“高内聚低耦合”,是不是破解就要费事一些,为什么呢!因为这个函数和其他较多地方有关联,破解就不一定很轻松,因为要考虑到很多点。
对于现在这个破解的世界里,大家一定不想自己辛辛苦苦搞的程序,几下就被人家给破了吧!因此个人觉得:“高内聚低耦合”也是有副作用的,并非想象中的完美。