我正在研究一些Clojure代码,它在不同的命名空间之间有一些循环依赖关系,我正在努力解决最好的解决方法.
>基本的问题是我在其中一个文件中得到一个“没有这样的var:namespace / functionname”错误
>我试图“声明”该函数,但是它抱怨:“不能指向不存在的合格的var”
>我当然可以重构整个代码库,但这似乎是不切实际的做每次你有依赖来解决…..而且可能会变得非常丑陋的某些网络的循环依赖
>我可以将一堆接口/协议/声明分离成一个单独的文件,并将所有内容都引用到这个….但似乎最终会变得混乱,并破坏了我已经拥有的相关功能的当前漂亮的模块化结构分组在一起
有什么想法吗?在Clojure中处理这种循环依赖的最佳方式是什么?
我记得在Clojure的一些关于名字空间的讨论 – 邮件列表和其他地方 – 我必须告诉你,协商一致(和AFAICT,目前Clojure的设计方向),循环依赖是一个设计的哭泣重构.解决方法可能偶尔是可能的,但丑陋的性能可能是有问题的(如果您使事情不必要地“动态”),不能保证永远无法工作.
原文链接:https://www.f2er.com/javaschema/281840.html现在你说圆形工程结构好,模块化.但是,为什么你会称之为如果一切都取决于一切…?而且,如果你提前计划一个树状的依赖结构,那么“每次你有依赖去解决”都不应该很频繁.为了解决您将自己的一些基本协议等等放在自己的命名空间中的想法,我不得不说,很多时候,我希望项目能做到这一点.我觉得我能够轻松地分析一个代码库,并且了解到它能够快速完成什么样的抽象.
总而言之,我的投票是重构.