【问题标题】:package structure & directory structure包结构和目录结构
【发布时间】:2011-04-11 07:20:22
【问题描述】:

Java web 应用程序中,“包结构”和“目录结构”的确切含义是什么?他们不一样吗?我看到有些文章有这两个术语,但我不确定确切的含义和区别。

【问题讨论】:

    标签: java web-applications jakarta-ee structure


    【解决方案1】:

    包是一起更改、一起使用和一起交付的代码的集合。所以 jar/war 是一个包。

    Package Design Principles

    我明白你的意思是源包,它更像是目录结构。但我相信,目录是硬盘上的物理表示。

    编辑:我在 3 年前写过原始答案。但没有改变,因为它被接受了。但是现在更改它,以便任何新访问者都可以受益并避免链接失效。可以根据下面的讨论来提取包的一些附加含义。例如,jar 是不是一个包?

    一起重用的类应该打包在一起,以便可以将包视为一种可供您使用的完整产品。那些一起重用的应该与那些不被重用的分开。例如,您的 Logging 实用程序类不一定与您的文件 io 类一起使用。因此,将所有日志分别打包。但是日志类可以相互关联。因此,创建一种完整的日志记录产品,例如,为了获得更好的名称 commons-logging 将其打包在(可重)使用的 jar 中,并为 io 实用程序创建另一个单独的完整产品,再次为了更好的名称,例如 commons- io.jar。如果您更新说 commons-io 库以说支持 java nio,那么您可能不一定要对日志库进行任何更改。所以分开比较好。

    现在,假设您希望您的日志记录实用程序类支持结构化日志记录,例如通过 splunk 等工具进行某种日志分析。您的日志记录实用程序的某些客户端可能想要更新到您的较新版本;其他一些可能不会。因此,当您发布新版本时,将所有需要并重用的类打包在一起进行迁移。因此,您的实用程序类的某些客户端可以安全地删除旧的 commons-logging jar 并移至 commons-logging-new jar。其他一些客户仍然可以使用旧 jar。但是,不需要客户端同时拥有这两个 jars(新旧),因为您强迫他们使用一些用于旧打包 jar 的类。

    避免循环依赖。 a 依赖于 b; b 在 c 上;条件;但 d 取决于 a。这种情况显然令人望而却步,因为定义层或模块等将非常困难,而且您不能相对于彼此独立地改变它们。

    此外,您可以打包您的类,这样如果一个层或模块发生更改,其他模块或层不必更改。因此,例如,如果您决定从旧的 MVC 框架升级到 rest API 升级,那么可能只有视图和控制器需要更改;你的模型没有。

    【讨论】:

      【解决方案2】:

      在大多数 Java 应用程序中,包结构应与 .java 和 .class 文件的目录结构相匹配。然而,这些目录是更大目录结构的一部分,包括源和/或字节码以外的其他数据。

      根据上下文,“包结构”也可能指交付包,每个包都包含一个应用程序或一个库。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-07-11
        • 2021-01-21
        • 1970-01-01
        • 2011-02-17
        • 2016-04-18
        • 1970-01-01
        • 1970-01-01
        • 2012-08-24
        相关资源
        最近更新 更多