Clojure中的循环负载依赖

Clojure中的循环负载依赖,clojure,cyclic-dependency,Clojure,Cyclic Dependency,我的项目结构简单,如下所示: |- core.clj |- dialogs.clj |- dialogs/ |- name_dialog.clj name\u对话框依赖于core,而core应该需要name\u对话框 所以我有这样的依赖关系: core.clj dialogs.clj name_dialog.clj 当我尝试运行该程序时,我得到以下错误 循环加载依赖项:[/ddsl/core]->/ddsl/dialogs->[/ddsl/core] 请让我知道如何重组我的项目(我是Cl

我的项目结构简单,如下所示:

|- core.clj
|- dialogs.clj
|- dialogs/
   |- name_dialog.clj
name\u对话框
依赖于
core
,而
core
应该需要
name\u对话框

所以我有这样的依赖关系:

core.clj dialogs.clj name_dialog.clj 当我尝试运行该程序时,我得到以下错误
循环加载依赖项:[/ddsl/core]->/ddsl/dialogs->[/ddsl/core]


请让我知道如何重组我的项目(我是Clojure的新手)。

经典答案(与Clojure无关)可能是回顾模块及其职责

->
下面代表“依赖”)

鉴于:

core -> dialogs -> core
对话框所需的
核心
模块的一部分提取到单独的共享模块中:

shared (depends on "nothing")
core -> dialogs -> shared
core -> shared (possibly)

对我来说,循环依赖性是设计错误的一个指标。即使解决了技术问题(使用加载时间序列或编译等),循环依赖通常是紧密耦合的标志,仍然值得修复。

为什么
core
需要其他名称空间?
core
从clojure“模板”生成xml,并且具有
-main
函数,该函数接收模板名称作为参数,例如“name dialog”,并从中生成xml(defn state[s&xs](散列映射:tag:state:attrs{name:s}:content(如果xs(vec xs)nil)))听起来像是
core
中依赖于其他名称空间中的函数的函数应该移动到这些名称空间中<代码>核心
名称空间不需要依赖于其他模块。谢谢,我将尝试移动它们,这是非常合乎逻辑的。但在
core
中,我有一个函数,它接收对话框的名称,例如
dialog\u name
,并生成xml,所以应该作为模块加载吗?(defn-main[对话框](发射(求值(符号对话框)))
(in-ns 'ddsl.dialogs)
core -> dialogs -> core
shared (depends on "nothing")
core -> dialogs -> shared
core -> shared (possibly)