java - 如何组织包(并防止依赖循环)?

标签 java dependencies package project-organization

我一直在我的 Java 项目上运行一些指标,显然包之间存在很多依赖循环。我真的不知道如何将东西组织成包,所以我只是做了对我有意义的事情,这显然是错误的。

我的项目是一个神经网络框架。神经网络具有神经元,它们通过连接相互连接。他们需要相互依赖。但是,也有不同类型的神经元,所以我认为将它们都放在自己的“神经元”包中是个好主意。显然 Connection 不是 Neuron,所以它不应该在包中,但由于它们相互引用,我现在有一个循环依赖。

这只是一个例子,但我还有更多这样的情况。您如何处理这些情况?

另外,我读到包层次结构中较高的包中的类不应该引用更深的包中的类。这意味着包“nn”中的 NeuralNetwork 类不能引用包“nn.neurons”中的神经元。你们遵守这个原则吗?如果我将 NeuralNetwork 移动到 'nn.networks' 或其他什么?在这种情况下,它将引用同级包而不是子包。这是更好的做法吗?

最佳答案

antcontrib VerifyDesign task会帮助你做你想做的事:

For example, if there are three packages in one source tree

* biz.xsoftware.presentation
* biz.xsoftware.business
* biz.xsoftware.dataaccess

and naturally presentation should only depend on business package, and business should depend on dataaccess. If you define your design this way and it is violated the build will fail when the verifydesign ant task is called. For example, if I created a class in biz.xsoftware.presentation and that class depended on a class in biz.xsoftware.dataaccess, the build would fail. This ensures the design actually follows what is documented(to some degree at least). This is especially nice with automated builds

因此,一旦您决定了事物的组织方式,您就可以在编译时强制执行这些要求。您还可以获得细粒度的控制,因此您可以允许某些情况打破这些“规则”。所以你可以允许一些循环。

根据您想要做的事情,您可能会发现“utils”包是有意义的。

对于您引用的特定案例...我可能会这样做:

  • 包 nn 包含 Nueron 和 Connection
  • 包 nn.neurons 包含 Nueron 的子类

Neuron 和 Connection 都是 NeuralNetowrk 中使用的高级概念,因此将它们放在一起是有意义的。 Neuron 和 Connection 类可以相互引用,而 Connection 类不需要了解 Neuron 子类。

关于java - 如何组织包(并防止依赖循环)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/670948/

相关文章:

machine-learning - WEKA GUI 中没有包管理器

java - JFrame 不绘制矩形

java - 用户使用 "save as"时如何选择文件名?

java - 测试数字是否落在 360 度圆的某个 22.5 度范围内的最有效方法

dependencies - Maven 神器 : x (managed from y)

database - 避免在没有模拟的情况下进行单元测试的数据库依赖

dependencies - Debian软件包,依赖的安装

ubuntu - 将自己的 poststep 添加到 Debian 软件包 - postrm.debhelper

java - 在 Eclipse 中打开 ant 文件时出现 AntSecurityException

重命名java包的Java代码