我需要知道为什么我们需要避免循环依赖?
在现实世界中,如果我们考虑,循环依赖非常重要。比如一个朋友需要另一个朋友的某物,而另一个朋友也需要这个朋友的某物,所以这有点循环吧?
那么为什么循环依赖是一个不好的设计呢? 如果我们真的需要避免这种情况,那么在面向对象的世界中,最好的可能设计是什么?
我需要知道为什么我们需要避免循环依赖?
在现实世界中,如果我们考虑,循环依赖非常重要。比如一个朋友需要另一个朋友的某物,而另一个朋友也需要这个朋友的某物,所以这有点循环吧?
那么为什么循环依赖是一个不好的设计呢? 如果我们真的需要避免这种情况,那么在面向对象的世界中,最好的可能设计是什么?
循环依赖的问题有点像鸡和蛋问题。
如果你依赖于我设置某些东西,而我又依赖于你设置某些东西,我们该如何开始?
这个问题的推论是,如果我引用了你的资源,你也引用了我的资源,那么我永远无法清理资源,因为这会破坏你,而你也无法清理资源,因为这会破坏我。
在两种情况下的答案都是引入一个中间人,将依赖关系从其中一方传递给他。因此,如果你将你的资源交给中间人,你就依赖于我和中间人,我依赖于中间人。这样,你可以清理资源,因为你现在不持有任何资源,我可以清理资源,因为没有人依赖于我,然后中间人可以清理资源。
llvm
项目完全支持循环依赖,并且他们正在编写虚拟机/编译器。你可以以此为例,并询问为什么他们采用这种设计。 - user2485710