我应该如何构建Java应用程序,我应该把我的类放在哪里?

2022-09-01 02:05:24

首先,我知道如何构建Java应用程序。但我一直对把我的课程放在哪里感到困惑。有支持者支持以严格面向域的方式组织包,其他人按层分隔。

我自己也一直有问题

  • 命名
  • 放置

所以

  1. 您将特定于域的常量放在哪里(以及此类的最佳名称是什么)?
  2. 你在哪里放置了基础设施和特定于域的东西的类(例如,我有一个FileStorageStrategy类,它将文件存储在数据库中,或者存储在数据库中)?
  3. 将异常放在哪里?
  4. 我有什么可以参考的标准吗?

答案 1

我真的很喜欢Maven的标准目录布局

对我来说,其中一个关键的想法是有两个源根 - 一个用于生产代码,一个用于测试代码,如下所示:

MyProject/src/main/java/com/acme/Widget.java
MyProject/src/test/java/com/acme/WidgetTest.java

(在这里,src/main/java 和 src/test/java 都是源根)。

优势:

  • 测试对受测类具有包(或“默认”)级别访问权限。
  • 您可以通过将 src/test/java 作为源根目录来轻松地将生产源代码打包到 JAR 中。

关于课程放置和软件包的一个经验法则:

一般来说,结构良好的项目将没有循环依赖关系。了解它们何时是坏的(以及它们何时不是),并考虑像JDependSonarJ这样的工具来帮助您消除它们。


答案 2

我是有组织的源代码的忠实粉丝,所以我总是创建以下目录结构:

/src - for your packages & classes
/test - for unit tests
/docs - for documentation, generated and manually edited
/lib - 3rd party libraries
/etc - unrelated stuff
/bin (or /classes) - compiled classes, output of your compile
/dist - for distribution packages, hopefully auto generated by a build system

在 /src 中,我使用的是默认的 Java 模式:以你的域 (org.yourdomain.yourprojectname) 开头的包名称和反映你使用类创建的 OOP 方面的类名(参见其他注释者)。常见的软件包名称,如utilmodelviewevents也很有用。

我倾向于将特定主题的常量放在自己的类中,例如SessionConstantsServiceConstants,放在域类的同一包中。


推荐