我一直在阅读很多关于逐个功能命名约定的内容。所以我决定尝试一个新项目。但是,我不确定它应该如何命名我的大多数类将使用的包,因为我使用的是一个巨大的框架,例如Spring
和Hibernate
。
这就是我们Spring contexts
类的处理方式:
我们的database
访问类,管理连接的访问类等。
我有一个关于此的草案:使用这些框架的通用包,例如:
com.company.project.common.spring
com.company.project.common.database
但我担心这仍然有点像package-by-layer
。 :)
如何创建我的feature classes
将要访问的包?
答案 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
可以保存所有功能的数据访问层的基类。
两种方法并行使用。您只需要决定某个类是框架扩展还是库扩展(您能想象在此项目之外使用它吗?)还是更接近项目的各个层。