重用库类时的包命名

问题描述 投票:0回答:4

假设我正在使用像

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 {}
java naming
4个回答
1
投票

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

  • 从技术角度来看,它不应该有任何区别(除非遇到冲突,因为该库的其他部分期望所有类都存在在这些库包中)
  • 除此之外,
  • 正在创建一些东西(它恰好基于一些第三方库)
从那里开始:“自然”的解决方案是通过使用

application.package.library.package

 命名约定来表达“你是这个类的所有者”。


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


0
投票
如果您正在拍摄一些开源代码的“快照”以嵌入到您的项目中,那么常见的约定是“按原样”使用它,使用类似以下内容:

package <lib-package>

Junit 使用

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

package my.tld.<lib-package>

由于您看起来本质上是

forking 原始项目,我建议您使用相同的约定。

但是,您应该考虑使用

适配器模式,而不是分叉,这将隔离您对原始代码的错误修复、更改和改进。


0
投票
这里引用了 Maven

将工件上传到中央存储库的指南

  • 我在 foo.com 上开发了 foo 项目的修补版本,我应该使用什么

    groupId

    当您修补/修改第三方项目时,该修补版本将成为您的项目,因此应在您控制的

    groupId

     下分发,就像您将开发的任何项目一样,而不是在 
    com.foo
     下分发。请参阅上面关于 
    groupId
     的注意事项。

© www.soinside.com 2019 - 2024. All rights reserved.