【问题标题】:Java naming convention for a class with version in its name?名称中带有版本的类的Java命名约定?
【发布时间】:2017-05-07 04:16:00
【问题描述】:

假设我有不同的类来处理同一协议的不同版本(可能具有不同的接口)。例如,一个名为 My Protocol (MYP) 的虚构协议:

我的协议 (MYP) 版本 1.0、1.1、2.0、2.2 等...

我能想到的一些命名示例是:

MYP10Handler, MYP11Handler, MYP20Handler, MYP22Handler, ...

MYP1_0Handler, MYP1_1Handler, MYP2_0Handler, MYP2_2Handler, ...

如果使用第一个选项,例如,如果协议达到更高版本,则会出现歧义。比如11.0(十一)版本:

MYP11Handler:版本 1.1 还是 11.0?

MYP110Handler:版本 11.0 还是 1.10?

然而,第二个选项似乎逃脱了骆驼案例规则。

通常如何对这些类型的类进行命名?有没有更好的做法?

【问题讨论】:

  • 我投票决定将此问题作为离题结束,因为它要求某些技术或程序的最佳实践
  • 我在Google Java Style Guide 中对此进行了介绍?
  • 你不应该把版本号放在类名中。您应该将它们放在像com.company.protocol.11_0.MyHandler 这样的包名中。当然应该有一个没有版本com.company.protocol.MyHandler的接口
  • @Frakcool MYP 协议是虚构的,它可以是任何协议。
  • @TimothyTruckle 包名中可以有下划线吗?例如,Google Java Style Guide 在命名包时是反对的。

标签: java version naming convention


【解决方案1】:

您应该将与整个程序部分的某个版本相关的所有文件/类放在一个包中,并使用代表该特定版本的名称。

当你想添加一个新版本的协议时,你应该创建一个新包,复制所有旧文件,并从新的东西开始,并且所有文件/类在每个包中都应该有相同的名称( com.yourname.myprotocol14.MyProtocolHandler,当然不是 com.yourname.myprotocol14.MyProtocolHandler14)

你必须决定你在包名上写下版本的精确度:你可以只写主版本(com.yourname.myprotocol10 版本 10.Xcom.yourname.myprotocol12 版本 12.X)或者甚至决定写次要版本(com.yourname.myprotocol10 用于版本 1.0com.yourname.myprotocol12 用于版本 1.2),由您决定。

用户可以通过导入com.yourname.myprotocol[version number]来决定他想要使用哪个版本的库(假设它是一个库),因此你应该把所有与库相关的文件放在every 包。

【讨论】:

  • 您的解决方案似乎很合理。但是我必须要问,在决定我用来编写版本的精度时,如何避免像com.yourname.myprotocol120这样的冲突,它是指版本1.20.X还是12.0.X不明显?
  • @Hydren 我认为没有办法在不使用 com.yourname.myprotocol1_20 用于 1.20 版和 com.yourname.myprotocol12_0 用于 12.0 版的情况下指定它。考虑使用点:com.yourname.myprotocol.1.20 用于版本 1.20,com.yourname.myprotocol.12.0 用于版本 12.0。为了减少歧义,您可以在 javadoc 中使用 @version :)
  • @Someone com.yourname.myprotocol.1.20 是一个无效的包名。
  • 我们目前使用“图像位图表示法”,我们在方法名称中将版本1.2.0 指定为myMethod1x2x0()12.0 在方法名称中分别指定为myMethod12x0x0()myMethod12x0()。我们必须在我们的代码库中使用这种表示法,因为下划线在我们的方法名称中具有不同的传统含义。
猜你喜欢
  • 2020-11-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-04
  • 1970-01-01
  • 1970-01-01
  • 2018-11-22
相关资源
最近更新 更多