【问题标题】:Shall I use package name or class name to reprensent a concept?我应该使用包名还是类名来表示一个概念?
【发布时间】:2014-04-19 07:20:34
【问题描述】:

我一直在争论 java 包的命名和 java 类名。

我遇到的问题如下:我们有一个叫Feature的接口,我们有子接口比如:LogInFeature和AuthenticationFeature。两个接口都有其特定的 API,并且它们都在同一个包中 对于这个问题,哪个包/类命名结构更有利,为什么?

com.example.internal.feature.LogIn
com.example.internal.feature.Authentication

com.example.internal.features.LogInFeature
com.example.internal.features.AuthenticationFeature

我喜欢第一种解决方案,因为它不会在所有类中重复 Feature。但另一方面,我也喜欢第二种解决方案,因为在最后附加功能有助于在大型代码库中发现很多代码。

如果除了内部功能,我还有外部功能,或者如果我允许我们的客户添加功能插件,答案会不同吗?

欢迎任何意见和建议。

【问题讨论】:

  • 我更喜欢第一种解决方案。这样你的代码看起来很优雅,你最终会在同一个地方得到你模块中的所有接口。您可能希望基于模块而不是基于特定功能创建包,因为这会使您的代码分解成您不希望我猜到的补丁。
  • 这并不能真正回答您的问题,但是如果您要使用第一个解决方案,您会将Feature 接口放在哪里? (只是出于好奇......:$)
  • @wns349,过去代码本身并没有太多考虑。 Feature.java 当前位于同一个包中:com.example.internal.feature。
  • @wns349 我建议将功能和子接口放在同一个功能包中。我会选择它,因为您的所有子界面都会与父界面处于同一级别。
  • @Lily 在这种情况下,您可以将所有父功能放在一个包中,将依赖的子功能放在另一个包中,以便至少您可以区分两者。顺便说一句,我会更多地提高代码的清晰度,并避免在我的代码中创建大量的包。希望你明白了选择最好的解决方案毕竟你是开发者:)

标签: java class package naming-conventions


【解决方案1】:

我倾向于选择第二个变体,类名稍长。

这背后的原因是,我觉得我应该能够仅通过查看名称就知道该类负责什么。此外,如果后面的代码在另一个包中还包含与 LogIn 相关的内容,这将不那么令人困惑(至少对我而言),这将导致两个具有相同名称的类。

【讨论】:

  • 你觉得命名:LogIn 和 Authentication 不好?
  • @Lily:不是真的,但我认为更长的名字更好。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-09-03
  • 2023-02-07
  • 1970-01-01
  • 1970-01-01
  • 2012-09-22
相关资源
最近更新 更多