我有一个Scala项目A,它有一个接口(抽象类)I,它的实现,以及对项目B(B.jar)的引用。 A与publish-local
打包在一起,编译成jar文件并存储在.ivy目录中。
反过来,项目B使用项目B中的I接口;它编译成一个jar并进入.ivy目录。
Scala中出现了一些设计问题:
答案 0 :(得分:2)
有时候所谓的循环依赖可以减少代码行,所以不能劝阻为“不好的做法”。事实上。 这一切都取决于项目的背景。 您需要回答诸如此类的问题
然后因为它是scala你实际上并不需要framework
来实现它。
考虑以下示例,
class IdentityCard(val id: String, val manufacturerCompany: String, person: => Person)
class Person(val firstName: String, val lastName: String, icard: => IdentityCard)
lazy val iCard = new IdentityCard("123","XYZ",person)
lazy val person:Person = new Person("som","bhattacharyya",iCard)
这两个类可以放在不同的jar中,但仍然可以编译并使用较少的代码。
注意,我们正在使用按名称调用传入的依赖项。此外,我们正在对变量进行延迟初始化,因此在访问它们之前不会对它们进行求值。这允许我们forward-reference
即。首先使用变量并稍后定义。
答案 1 :(得分:0)
如果没有更多具体细节,很难提供“最佳实践”建议。如果“项目B”与项目A紧密耦合,它们可能应该在同一个项目中,但在不同的子项目/子模块中。界面B使用也可以是它自己的子项目来删除圆圈。
sbt和maven支持这个,here's the sbt docs。