繁体   English   中英

包结构和目录结构

[英]package structure & directory structure

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

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

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

包是一起更改,一起使用和一起运送的代码的集合。 因此,罐子/战争是一个包装。

包装设计原则

我了解您的意思是源程序包,它更像是目录结构。 但我相信,目录是硬盘上的物理表示。

编辑:3年前,我曾写过原始答案。 但是并没有改变,因为它被接受了。 但是现在就对其进行更改,以便任何新的访问者都可以受益,并且还可以避免链接损坏。 可以基于以下讨论来提取包装的一些其他含义。 例如,罐子是包装吗?

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

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

避免循环依赖。 a依赖b; b对c 条件; 但是d取决于a。 该场景显然令人望而却步,因为很难定义层或模块等,并且您不能相对于彼此独立地进行更改。

同样,您可以打包您的类,以使如果某个层或模块发生更改,则不必一定更改其他一个或多个模块。 因此,例如,如果您决定从旧的MVC框架升级到其余的API,则仅视图和控制器可能需要更改。 您的模型没有。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM