2011-04-11 160 views
0

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

回答

2

软件包是一起更改的代码集合,一起使用并一起发货。所以一个罐子/战争是一个包装。

Package Design Principles

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

编辑:我已经掌握了3年多的原始答案。但没有改变,因为它被接受。但现在改变它,以便任何新的访问者可能会受益,也可以避免链接腐烂。根据下面的讨论可以提取包的一些附加含义。例如,一个jar包是一个包吗?

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

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

避免循环依赖。 a取决于b; b对c;条件;但是d取决于a。这种情况显然会阻止,因为定义图层或模块等非常困难,您不能相互独立地改变它们。另外,你可以打包你的类,如果一个图层或模块发生了变化,其他模块或图层就不一定必须改变。因此,例如,如果您决定从旧的MVC框架转到其他API升级,那么只有视图和控制器可能需要更改;你的模型没有。

2

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

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