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

Val*_*lva 2 java spring hibernate naming-conventions package

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

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

在此输入图像描述

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

在此输入图像描述

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

com.company.project.common.spring
com.company.project.common.database
Run Code Online (Sandbox Code Playgroud)

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

lex*_*ore 6

常见的建议是"逐个功能,而不是图层".我经常做的是"逐个功能,然后分层".我还认为顶级软件包应该是基于"功能"的(功能组件,无论如何).但我也希望将我的图层分成子包.

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

我通常使用两种方法:

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

但是,如果我需要为功能层实现公共基类,这可能就像是com.acme.foo.common.<layer>.例如,如果我们拥有com.acme.foo.<feature>.dataaccess某些功能的数据访问层包,com.acme.foo.common.dataaccess则可以为所有功能的数据访问层保留基类.

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