谈解耦合与DRY原则

Posted by

在文武双全学习软件工程的设计模式时,有几个词引发了我极大的兴趣和思考,分别是耦合、解耦和DRY。在思考了很长一段时间后,我粗浅的认为这几个词,对全人类来说都有着极其重大的意义。甚至可以用来解决和解释全宇宙的一些问题和现象。在脑子思考了很长一段时间后,我觉得可以谈谈我对解耦合与DRY原则的一些看法。

先来谈谈耦合、解耦与DRY原则的含义

耦合对应的英文名词是coupling,让人兴奋的是这个单词的英语和美语的发音是一样的, 读作[ˈkʌplɪŋ] 。英语的意思是:挂钩,链接装置,连接,联结,结合,交配,交媾。耦合的英文形容词是coupled,美语和英语的发音也一样,读作 [‘kʌpld]。译作:连结的,联系的。

通过了解耦合这个词的英文名词和形容词,我们可以发现这个词其实就是用来描述和形容两个事物之间的连结关系的。耦合度高,就是形容事物之间的连结很紧密。耦合度高的事物,相互之间就变成了依赖。讲到这里,解耦的意思就呼之欲出了:解除强耦合事物之间的耦合。如果是弱耦合的话,再去解耦岂不是脱裤子放屁多此一举?

DRY原则,其实是英文短句 Don’t repeat yourself 的缩写,字面意思来看:”不要重复你自己”。文武双全最早了解到这个词,是从王垠大神博客里那篇《DRY原则的误区》。在软件工程中,DRY原则是让程序员把代码重复的部分抽象出来,做成模版或者类以减少代码量和工作量。

解耦这个词翻译的并不恰当

也不知道解耦这个词,是从哪里来的,什么时候开始用的。我总觉得这个词,翻译的有点不太恰当。实际上我觉得解耦,明显不如降耦这个词更准确。解耦,从字面来讲是解除耦合的意思。实际上,耦合度作为形容词的话,肯定不是只有解除归零这一种状态。人世间任何事物的关系,都是一种状态。按照百分比来形容,耦合度为零,意味着两个事物完全没关系。耦合度为100%,意味着两者高度依赖,互相谁也离不开谁。解耦,从字面来讲,就是把关系解除,那就是归零了吗?怎么提现0到100%之间的诸多关系和变化呢,显然解耦这个词是不恰当,更准确的说法应该是降耦。

耦合度降低,意味着关系紧密度降低,而不是完全解除关系。耦合度降低到零,就意味着关系完全解除,这才是真正的解耦。所以说,降耦这个词比解耦更准确。应该用降耦来替代,我们传统意义上的解耦。

研究解耦合与DRY的重大意义

在学习和研究软件工程的过程中,我发现这个行业有很多东西是非常值得深入研究的。因为软件工程的很多理论,其本质就是哲学和思想。所谓哲学和思想,就是能够推而广之,放之四海而皆准的人类理论和行为。比如说,耦合度可以用来形容宇宙中任何事物的紧密关系,DRY原则也可以适用于人类的所谓行为中。不仅仅是搞软件工程的人值得研究两者的重大意义,几乎全人类都有学习和研究两者的重要性。

举个简单的例子:整个人类本身和地球是高度耦合的。从抽象的角度来讲,所有的人类都集中在地球这一个类里面了,人类只需要建设好一个地球就行了。但是强耦合的结果,意味着极大的风险和不确定性。如果地球完蛋了,整个人类都完蛋。这个大的问题,用我们身边的事情来讲,可能更通俗易懂。

拿现在普遍的一夫一妻制度来讲,结婚就意味着夫妻双方结成了强耦合关系。这个关系结成后高度抽象化了很多行为,这些行为完全符合DRY原则。比如说:婚后就把恋爱约炮的过程高度抽象化了,不需要这么复杂的流程,也不需要那么高昂的成本,晚上回家连根蜡都不点就能要求配偶交媾。但是,强耦合也意味着极大的风险。夫妻双方有任何一方做出了不忠诚于婚姻的行为,这往往意味着家庭乃至家族的伤害甚至破裂。所以说,一夫一妻制度本身就是个高度危险的家庭关系制度。

人类几千年来,用尽各种道德和法律手段,都无法很好的解决这个问题。就是因为这个制度,让夫妻之间的关系耦合度太高。当你把“想对所有女人做的事情”,都抽象到一个女人身上来做,这个耦合度太高也容易爆炸。但凡这女的有一丁点不高心,你那天晚上就要翻车。跟自己老婆交媾,再跟另外一个女人交媾,看上去是在重复做相同的事情。实际上是,把自己和老婆解耦了。但是老婆太多,每个人都要做重复性的事务,就会像袁世凯那样把自己累的肾虚而亡。

还有一个家庭只有一个孩子,看上去6+1的家庭似乎能做到优生优育。实际上当一家六口跟一个孩子高度耦合时,这个孩子爆炸一家七口也就全爆炸了。在西方一些国家崇尚,男的负责赚钱养家,女的负责在家里带孩子。实际上,这是更加危险的家庭关系。看上去夫妻双方各自管自己的事情,不会出现多头管理导致低效浪费时间。实际上一个男人,把自己跟养活一个家庭的责任高度耦合。而一个女人,也跟教育下一代的事情高度耦合。这两个人都有可能螺旋爆炸,哪一个爆炸都这个家庭都会造成极大的伤害。于是,我们就会看到说男的失业后,有的会想自杀。而高度耦合的家庭关系,还搞出来虎妈这样的怪胎。这都是在极不正常的家庭制度里,所导致的严重问题。于是,我要呼吁社会学家和人类学家,可以好好来研究研究家庭关系当中那些高度耦合的问题。

从以上这些案例我们可以清楚的发现,解耦合与DRY原则跟我们每一个人都息息相关。不仅仅是软件行业的人需要了解,我觉得地球上的每一个人都应该尽早学习和研究。这两者潜移默化的影响到我们人类,每一个人的生活与工作,意义十分重大。

解耦和DRY互相矛盾

抽象化程度越高,往往意味着耦合度越高。如果一个网站,所有的HTML都抽象化到一个模板,也就意味着所有的网页都跟这个模板强耦合。一旦修改这个模板,那么网站所有的页面都会发生改变。如果每一个网页都有自己的模板,一个网站有1万个网页,你就要做1万个模板。看上去解耦了,可是这工作量确实让人傻逼。

DRY将重复的事物,通过抽象化的手段来提高效率,但也同时提高了被抽象物之间的耦合度。耦合度越高,对象之间的依赖越强,应对风险的能力越差。事物高度解耦,就必然在重复做一些事情。事物按照DRY原则高度抽象化之后,耦合度就必然上升。

所以说,解耦合和DRY,就是天生的一对矛盾体。是通过解耦合来降低风险提高弹性,还是通过DRY来提高效率节省时间。孰轻孰重,估计每个行业每个人都有不同的看法。这就是个仁者见仁,智者见智的问题了,也是值得每个人认真思考和探索的问题。接下来我想讲一讲,自己对这两者的一些粗浅的看法。

应用平衡理论解决解耦与DRY原则之间的矛盾

解决问题的理论,我目前知道两种。一种是按照二八原则来解决,也就是说20%重视解耦,80%重视DRY。比如说,一个男人20%精力用在出去偷吃,80%的精力留给老婆。在很长一段时间,我喜欢用二八原则来解释和解决一个问题。但是,目前我渐渐不再重视这种理论,而更倾向于使用平衡理论。也就是说,以二八原则为基础,使解耦和DRY之间的比例无限接近50%。解耦的程度最起码得是20%,剩下80%应用DRY原则来提高效率。但是,绝对不是说这就是理想的状态。解耦增加的事物的重复性和复杂度,应该在条件充裕的情况下,将解耦从20%推向50%。

我们的目标是,解耦和DRY原则达到道法自然、天人合一的平衡境界。

文武双全对解耦合与DRY原则总结

人类应该尽快与地球解耦
人类应该尽快与地球解耦

其实关于解耦合和DRY原则,我还有大多的话想说。例如说,一个国家跟一个政党高度耦合,一旦这个政党出现问题,这个国家风险就很高。一个国家主要靠大学教育培养人才,一旦大学这套体制出现问题,整个国家的人才培养体系也容易出现问题。美国整个国家在解耦这方面做得很好,不仅仅国家跟政党解耦了,而且通过吸引移民和私立教育,使得培养人才跟传统大学制度解耦了。在探索太空领域,也走在世界前列。据说美帝已经像太阳系的所有行星发射了探测器,致力于人类跟地球的解耦。限于时间和精力的关系,没办法写太多,以后还会继续分享自己的心得体会。

希望有更多的人,致力于解耦合与DRY的研究。在思想领域,开拓一片新天地。

One comment

  1. 文章很精,把耦合相关概念讲的很生动。https://github.com/manaphp/manaphp 也算是个耦合相关的实践。

Leave a Reply

您的电子邮箱地址不会被公开。 必填项已用*标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据