8

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

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

name_dialog依赖于core,并且core应该需要name_dialog

所以我有这样的依赖:

核心.clj

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

对话框.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 的新手)。

4

1 回答 1

8

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

->以下代表“取决于”)

鉴于:

core -> dialogs -> core

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

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

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

于 2015-10-10T18:59:44.657 回答