重用库类时的包命名

时间:2017-06-28 09:12:19

标签: java naming

我们假设我正在使用像library-package.LibraryClass这样的库类。

package library.package;
class LibraryClass {}

我研究了它的实现,为了我的应用目的,我想稍微修改那个类,然后使用。我的应用程序包application-package

package application.package;
class ApplicationClass {}

如何命名应该存储该类LibraryClass的包?我应该在我的项目library-package中重用,还是应该使用方案application-package.library-package,因为我记得我也遇到了这样的方案。

第一个

src\main\java\application\package
src\main\java\library\package

第二个

package application.package.library.package;
class LibraryClass {}

3 个答案:

答案 0 :(得分:1)

我认为这可能归结为意见,但让我们提取手头的事实:

  • 从技术角度来看,它应该没有任何区别(除非你遇到冲突,因为该库的其他部分需要所有类那些库包中)
  • 除此之外,正在创造一些东西(恰好基于某些第三方库)

来自那里:“自然”的解决方案是使用application.package.library.package命名约定来表达“你是这个类的所有者”。

答案 1 :(得分:1)

这取决于您希望使用的内容。

我个人使用的方案如下:

tschallacka.magiccookies.util.math
tschallacka.magiccookies.util.time
tschallacka.magiccookies.graphics.model

等...

因此,您拥有自己的“域名”tschallacka

然后是你的项目名称。就我而言magiccookies

然后是所有这一切的群体,因此您可以轻松找回相关的课程。在这种情况下,util用于我的实用程序类,graphics用于我的3d图形类。

然后我想通过为该包中的工具类型添加特定包来指定更多内容,math用于数学相关类,time用于日期和时间,model用于我所有的图形模型辅助函数。

基本上,这取决于您,以及您希望用于组织代码的任何样式。

大多数程序员都有一些指导方针/惯例

  

命名约定

     

包名称全部小写,以避免与   类或接口的名称。

     

公司使用他们的反向互联网域名开始他们的   包名称 - 例如,com.example.mypackage用于名为的包   mypackage由example.com的程序员创建。

     

需要处理单个公司内发生的名称冲突   按照公约在该公司内部,也许包括该地区或   公司名称后面的项目名称(例如,   com.example.region.mypackage)。

https://docs.oracle.com/javase/tutorial/java/package/namingpkgs.html

答案 2 :(得分:0)

如果您正在拍摄快照'一些开源代码嵌入到你的项目中然后一个共同的惯例是使用它'原样使用类似的东西:

package <lib-package>

Junit使用hamcrest执行此操作,但这可能会导致问题,因为它本质上是一个分支,并且您已绑定到特定版本。如果使用以下约定,则可以避免此问题。

package my.tld.<lib-package>

由于您似乎基本上是forking原始项目,我建议您使用相同的约定。

但是,您应该考虑使用Adapter Pattern而不是分叉,这将隔离原始代码中的错误修复,更改和改进。