易学观点一:前论,乾坤
本文带有对常识的颠覆性,凡是心理承受能力太差或受封建分析思想毒害过深的同志,不适合阅读本文:)
耦合是抽象描述间的关联度的量的描述。耦合度高的,可以转化为内聚来处理,内聚度低的,可以转化为低耦合来看待。
耦合与内聚是对象间的阴阳,易经曾有描述“一阴一阳为之易”,我们从动态的角度来看待阴阳如何变化与对象性质的变化。
老子所谓:“天生一,一生二,二生三,三生万物”,易之所论:“无极生太极,太极生两仪,两仪生四象,四象出八卦”。在老子说的话中,天道的基数为2,也就是一阴与一阳,而易经里面所述的两仪就是老子所指的天道。换用数字来说,2的1次方是2,2的2次方是4,2的3次方是8,也就是说,儒与道是相通的,这是基本的常识。
我们根据爻形,可以发现,阳连阴断,那么我们就定义高内聚为阳,低为低耦合吧。
这里举一个预览性的例子:
乾卦可以做为完全内聚性的代表,那么在内聚度不断提升的过程中,会出现些什么呢?
提高内聚性可以提高代码的复用性,但也会造成耦合度的升高,假设内聚性分为6个阶段,那么按照乾卦的卦辞,分别如下:
潜龙勿用。
//注释:勿用,很明确,在对象间,采用只有一条关联而达到实现的目的话,还是别用了。因为对象间的关联并没有表现出什么特征,这对于复用没有任何意义。
见龙在田,利见大人。
//注释:对于可以看到眉目的多条关联,可以考虑采用强耦合来提高它们间的复用性,比如采用继承或将大类分割为各个小类策略。也就是说,在对象间的关联比较明显,而可复用性开始明显的时候就是采用提高内聚度的时机。
君子终日乾乾,夕惕若,厉无咎。
随着内聚性的提高,耦合度也开始增加,这里要开始着重考虑,是否还是进一步提升了,如果进一步提高没有效果,此处可以可以变爻,也就是第三爻开始变化为低耦合度的阶段,也就是到了这个层次后,就要开始注意了。这里也意味着,耦合度到达完全独立的40%~60%的时候,就要开始仔细考虑代码中的结构了,千万不要滥用提高耦合度的策略。
或跃在渊,无咎。
//注释:很明显,在此处,已经是经过了初步决策,这里认为内聚性的进一步提高相对而言,是非常有利的。
飞龙在天,利见大人。
//注释:内聚度提高到了80%左右的时候,是比较理想的情况,对现实来说也是非常好的策略,前提当然是在前面的步骤中,决策出了需要进一步提高代码耦合度的进程。
亢龙有悔。
//注释:代码的耦合度已经高到了紧密的地步,在这个高层次上的耦合,意味着在该类中的对象与外部对象交互度降到了最低,似乎满足了高内聚的情况,实际上,这属于“看起来很美”的情况,因为这块代码已经凝结成了一团固体,它与其它对象的交互的灵活性严重降低,这里出问题的关键在于忽略了“低耦合”,在提高内聚度的同时,也使得耦合度提高了。
坤卦代表着低耦合,采用易学观点,有如下结论:
履霜,坚冰至。
//对于一开始来说,放弃代码的重用性,降低耦合度,是一件困难的事,因为代码复用,可以有效地提高生产功能的效率。
直方大,不习无不利。
//在耦合度的降低中,好处是十分明显的。
含章可贞。或从王事,无成有终
//当代码的耦合度在30%左右的时候,优势比较明显,此时相对于不从事非常核心扩展性代码来说,可以起到非常便利的作用。
括囊,无咎无誉。
//进一步进行降低耦合性,使得该对象内部结构更加松散性的组织,这样的对象易于改变,很灵活。
黄裳,元吉
//这就是传说中的黄袍加身了,这是非常有趣的事,似乎耦合度在这个层面上可以达到最佳的效果。
龙战于野,其血玄黄。
//问题来了,耦合性过低的情况下,由于需要一个组织该对象内部的子对象或管理性对象,组织与管理中,难免会产生混乱。
利永贞。
//尽管有利永贞,但不意味着这是件好事,现在已经没有了对象的概念了,对象的松散性被扩展到了无限大,实际上,对象本身也已经不存在了。在古语中,“利”的含义是“和”,即事物之间没有关联,相互之间没有任何互相影响,利永贞,就描述这当前的状态,对于软件开发来说,暂时没有发现此状态的价值。