java - 使用按功能包约定将我的框架类放在哪里?

标签 java spring hibernate package naming-conventions

我已经阅读了很多有关按功能包命名约定的内容。所以我决定在一个新项目中尝试一下。但是,我不确定应该如何命名我的大多数类将使用的包,因为我使用的是一个巨大的框架,例如 SpringHibernate,例如。

这就是处理我们的 Spring 上下文 类的方法:

enter image description here

还有我们的数据库访问类,用于管理连接等。

enter image description here

我有一个关于此的草案:为这些框架使用通用包,例如:

com.company.project.common.spring
com.company.project.common.database

但恐怕这看起来仍然有点像逐层封装。 :) 应如何创建将由我的要素类访问的包?

最佳答案

常见的建议是“按功能打包,而不是按层打包”。我经常做的是“按功能打包,然后分层”。我还认为顶级包应该是基于“功能”的(功能组件,等等)。但我也喜欢将我的层分成子包。

从我的角度来看,与框架相关的代码本身并不构成“功能”(如“问题域的重要、高级方面”),因此按功能打包没有多大意义这里。但是,这仍然是重要的代码,您需要一种方法来构建它。

我通常使用两种方法:

如果我需要扩展或扩充我正在使用的库,我会按照与库的包结构并行的方式构建包。例如,如果我需要为 Spring 实现一些新的数字格式化程序,我可能会将包命名为 com.acme.foo.springframework.format.number ,平行于org.springframework.format.number .

但是,如果我需要为功能层实现通用基类,这可能类似于 com.acme.foo.common.<layer> 。例如,如果我们有 com.acme.foo.<feature>.dataaccess某些功能的数据访问层的软件包,com.acme.foo.common.dataaccess可以保存所有功能的数据访问层的基类。

两种方法并行使用。您只需决定某个类是框架还是库扩展(您能想象在该项目之外使用它吗?)或者它是否更接近您的项目的各层。

关于java - 使用按功能包约定将我的框架类放在哪里?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41160381/

相关文章:

java - java中的无限列表

java - Swing GUI 在数据处理期间不会更新

java - Android 应用程序正确读取字符串列,但不能正确读取第三个整数(sqlite)

java - org.apache.coyote.http11.Http11Processor.service 解析 HTTP 请求 header 时出错

java - 如何在模型级别清理包含 HTML 的字符串字段?

java - Jenkins 重启后不显示作业

java - 用于 appengine/Spring 和前端之间通信的持久和异步流

java - 使用 Spring 的服务器内存上的单个类文件会导致问题

java - Hibernate 5 命名策略示例

java - 是否可以使用 InheritanceType.SINGLE_TABLE 保存顶级实体?