重用库时的包命名 class
package naming in case of reusing library class
假设我使用的库 class 如 library-package.LibraryClass
.
package library.package;
class LibraryClass {}
我研究了它的实现,出于我的应用目的,我想稍微修改一下 class 然后使用。我的应用程序有包 application-package
.
package application.package;
class ApplicationClass {}
我应该如何命名应该存储 class 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 方库)
来自那里:"natural" 解决方案是使用 application.package.library.package
命名约定来表达 "you are the owner of this class"。
这取决于你想用什么。
我个人使用的方案如下:
tschallacka.magiccookies.util.math
tschallacka.magiccookies.util.time
tschallacka.magiccookies.graphics.model
等...
所以你有自己的 'domain' tschallacka
然后是你的项目名称。就我而言 magiccookies
然后是它所属的组,所以你可以很容易地找到相关的 类 回来。在这种情况下,util
用于我的实用程序 类,graphics
用于我的 3d 图形 类。
然后我想通过为该包中的工具类型添加特定包来指定更多,math
用于数学相关 类,time
用于日期和时间, model
我所有的图形模型辅助函数。
基本上这取决于您,以及您希望使用何种风格来组织代码。
有一些 guidelines/conventions 大多数编码员坚持
Naming Conventions
Package names are written in all lower case to avoid conflict with the
names of classes or interfaces.
Companies use their reversed Internet domain name to begin their
package names—for example, com.example.mypackage for a package named
mypackage created by a programmer at example.com.
Name collisions that occur within a single company need to be handled
by convention within that company, perhaps by including the region or
the project name after the company name (for example,
com.example.region.mypackage).
https://docs.oracle.com/javase/tutorial/java/package/namingpkgs.html
如果您要将一些开源代码 'snapshot' 嵌入到您的项目中,那么通常的惯例是使用它 'as is',使用类似于:
package <lib-package>
Junit 使用 hamcrest 执行此操作,但这可能会导致问题,因为它本质上是一个分支,并且您绑定到特定版本。如果您使用以下约定,可以避免此问题。
package my.tld.<lib-package>
由于您看起来基本上是 forking 原始项目,我建议您使用相同的约定。
然而,您应该考虑使用 Adapter Pattern 而不是分叉,这将隔离您对原始代码的错误修复、更改和改进。
假设我使用的库 class 如 library-package.LibraryClass
.
package library.package;
class LibraryClass {}
我研究了它的实现,出于我的应用目的,我想稍微修改一下 class 然后使用。我的应用程序有包 application-package
.
package application.package;
class ApplicationClass {}
我应该如何命名应该存储 class 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 方库)
来自那里:"natural" 解决方案是使用 application.package.library.package
命名约定来表达 "you are the owner of this class"。
这取决于你想用什么。
我个人使用的方案如下:
tschallacka.magiccookies.util.math
tschallacka.magiccookies.util.time
tschallacka.magiccookies.graphics.model
等...
所以你有自己的 'domain' tschallacka
然后是你的项目名称。就我而言 magiccookies
然后是它所属的组,所以你可以很容易地找到相关的 类 回来。在这种情况下,util
用于我的实用程序 类,graphics
用于我的 3d 图形 类。
然后我想通过为该包中的工具类型添加特定包来指定更多,math
用于数学相关 类,time
用于日期和时间, model
我所有的图形模型辅助函数。
基本上这取决于您,以及您希望使用何种风格来组织代码。
有一些 guidelines/conventions 大多数编码员坚持
Naming Conventions
Package names are written in all lower case to avoid conflict with the names of classes or interfaces.
Companies use their reversed Internet domain name to begin their package names—for example, com.example.mypackage for a package named mypackage created by a programmer at example.com.
Name collisions that occur within a single company need to be handled by convention within that company, perhaps by including the region or the project name after the company name (for example, com.example.region.mypackage).
https://docs.oracle.com/javase/tutorial/java/package/namingpkgs.html
如果您要将一些开源代码 'snapshot' 嵌入到您的项目中,那么通常的惯例是使用它 'as is',使用类似于:
package <lib-package>
Junit 使用 hamcrest 执行此操作,但这可能会导致问题,因为它本质上是一个分支,并且您绑定到特定版本。如果您使用以下约定,可以避免此问题。
package my.tld.<lib-package>
由于您看起来基本上是 forking 原始项目,我建议您使用相同的约定。
然而,您应该考虑使用 Adapter Pattern 而不是分叉,这将隔离您对原始代码的错误修复、更改和改进。