Web 技术研究所

我一直坚信着,Web 将会成为未来应用程序的主流

循环依赖与耦合无关

  如果两个函数在调用时都互相依赖了对方,那么这一对函数将形成一个间接递归。同样的概念,如果两个模块中的函数互相有依赖关系,也是一个间接递归的概念。然而由于是跨模块的间接递归,很多人就觉得这种逻辑是不合理的,甚至一些编译器也直接抛错。
  如果非要说不合理的话,首先「递归」就不合理。当年学 C 语言第一次接触到递归的时候瞬间觉得脑子不够用了,这玩意儿无法用常识去思考。然而用多了就习惯了这种思维方式,现在觉得一些东西写起来麻烦就直接用了递归。
  既然递归是合理的,那么为什么模块间的互相依赖是不合理的呢?这时有人就告诉我,因为造成了双向耦合,使程序维护成本增加。那么我们如果将两个模块的耦合度降到消息耦合的程度呢?于是这时候大家又变得都能接受这个「基于消息耦合的循环依赖」了。
  我对这个结果表示十分诧异。为什么模块依赖问题要和耦合问题扯到一起?我看到很多开发者为了避开「直接循环依赖」这条魔咒,将所有循环依赖降级到「基于消息耦合的循环依赖」来实现。这不仅增加了程序实现上的复杂程度,而且还对整个架构起不到任何优化作用。
  模块自嵌套算是一种无耦合的状态了吧?但它依然容易出错,因为有递归的概念在(最典型的例子就是表格嵌套)。而两个共轭模块是内容耦合的吧?然而只要其不存在递归就不容易出错(共轭模块确实是不建议出现的,如果没有其它阻碍,比如终端限制之类的,就应该直接合并成一个模块)。
  我的观点是:循环依赖同递归一样,是反直觉的,确实比较容易出问题。容易出问题是因为递归的反直觉性,而不是因为耦合。
  如果认同递归是一个合理的概念,那么循环依赖也应该是合理的。我不是在推销高耦合的程序,只是在证明循环依赖无关耦合而已。无论是否接受循环依赖,总是应该尽可能地避免高耦合的东西出现。
网名:
54.144.24.*
电子邮箱:
仅用于接收通知
提交 悄悄的告诉你,Ctrl+Enter 可以提交哦
神奇海螺
[查看全部主题]
各类Web技术问题讨论区
发起新主题
本模块采用即时聊天邮件通知的模式
让钛合金F5成为历史吧!
次碳酸钴的技术博客,文章原创,转载请保留原文链接 ^_^