在哪里使用逐个功能的约定来放置我的框架类?

时间:2016-12-15 09:16:47

标签: java spring hibernate package naming-conventions

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

这就是我们Spring contexts类的处理方式:

enter image description here

我们的database访问类,管理连接的访问​​类等。

enter image description here

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

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

但我担心这仍然有点像package-by-layer。 :) 如何创建我的feature classes将要访问的包?

1 个答案:

答案 0 :(得分:6)

常见的建议是"按功能打包,而不是图层"。我经常做的是"按功能打包,然后图层"。我还认为顶级软件包应该是基于功能组件的功能组件。但我也希望将我的图层分成子包。

从我的观点来看,与框架相关的代码本身并不构成"功能" (因为在问题域的重要,高级方面"),因此逐个功能在这里没有多大意义。但是,这仍然是重要的代码,你需要一种方法来构建它。

我通常使用两种方法:

如果我需要扩展或扩充我正在使用的库,我会构建与库的包结构并行的包。例如,如果我需要为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可以保存所有功能的数据访问层的基类。

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