Clojure中的循环加载依赖



我的项目有一个简单的结构如下:

|- core.clj
|- dialogs.clj
|- dialogs/
   |- name_dialog.clj

name_dialog依赖于core,而core需要name_dialog

所以我有这样的依赖项:

core.clj

(ns ddsl.core
  (:gen-class)
  (:require [clojure.xml :refer :all]
            [ddsl.dialogs :refer :all]))

dialogs.clj

(ns ddsl.dialogs
    (:require [ddsl.core :refer :all]))
(load "dialogs/name_dialog")

name_dialog.clj

(in-ns 'ddsl.dialogs)

当我尝试运行程序时,我得到以下错误Cyclic load dependency: [ /ddsl/core ]->/ddsl/dialogs->[ /ddsl/core ]

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

与Clojure无关的经典答案可能是检查模块及其职责。

(->代表"depends on")

给定

:

core -> dialogs -> core

core模块中dialogs需要的部分提取到一个单独的共享模块中:

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

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

相关内容

  • 没有找到相关文章

最新更新