包装结构&目录结构

时间:2011-04-11 07:20:23

标签: java web-applications java-ee structure

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

2 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:2)

包是一组代码,它们一起更改,一起使用并一起发送。因此jar / war是一个包。

Package Design Principles

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

编辑:我有超过3年的写作原始答案。但是因为被接受而没有改变。但现在改变它,以便任何新的访客可能受益,也避免链接腐烂。基于下面的讨论,可以提取包的一些附加含义。例如,jar是一个包吗?

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

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

避免循环依赖。依赖于b; b; c;条件;但是d取决于a。这种情况显然是一种威慑,因为定义图层或模块等非常困难,而且你不能相互独立地改变它们。

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