【问题标题】:Should I avoid commonly used class names?我应该避免常用的类名吗?
【发布时间】:2020-12-15 19:02:51
【问题描述】:
一些类名非常“通用”,以至于它们经常出现在几个不同的包中,包括库和应用程序代码。一些例子:
在我的 IDE 中,尝试为其中一个类自动完成导入会引发几个相互竞争的建议。
在命名类时,避免在其他地方使用的类名是个好主意吗?
对于其中一些示例,我认为不鼓励使用这样的类名,因为它根本不够有意义(例如 Factory),但我想知道是否不鼓励使用类名 因为它是在其他地方(经常)使用。
【问题讨论】:
标签:
java
naming-conventions
naming
【解决方案1】:
评论、地区和位置看起来都不错。就个人而言,主观上,组件和工厂绝对是太常见了,但客观上我想不出任何不使用它们作为名称的传统理由。例如,我肯定会尝试将这些名称与它们各自的用法结合起来; TaskFactory、WidgetComponent、ButtonFactory等
【解决方案2】:
取决于我们谈论的是业务部分还是技术部分。
在技术部分:使用通用名称实际上是让其他人了解所使用模式的一种方式,Factory 就是一个很好的例子 - 当你看到一个名为 SomethingFactory 的类时,你可以期待一个 Factory Pattern. 它更进一步到框架、库等 - SomethingAutoConfiguration 使用 Spring-Boot,SomethingEntity 使用 JPA,我认为前端框架(React、Angular)Component 是一个非常常见的词。因此,只要您正确使用它们,就一定要使用它们。
在业务部分:简单,如果这些词描述了您的业务领域,那么一定要使用它们。不要仅仅因为这些词看起来很常见就试图发明一些花哨的名字(或词库!),这是您的业务领域 - 它是神圣的。
【解决方案3】:
您应该在对您最有意义的地方使用类名。您提出的上述名称都没有限制,您没有理由不能使用它们(假设一种语言支持命名空间并且可以通过这种方式避免命名冲突)。
但是,您可以考虑深入到更具体和更精确的类名,这将更好地描述代码中对象的含义。例如:
- 代替 Comment:LineComment 或 BreakComment 很容易成为编译器项目中的类名,您希望在其中为 cmets 创建语义块.
- 代替 Component:ListComponent、CalendarComponent 或 ViewComponent 在实现 UI 库时特别有意义,其中你有基于类的组件。
- 而不是 Factory:如果您尝试制作比萨饼,PizzaFactory 更有意义!
- 而不是 Location:GeographicLocation 或 SemanticLocation 在实现基于方向的导航应用时更有意义,并且您试图区分“北纬 45 度,西经 77 度”和“披萨店旁边”。
-
Region:CodeRegion 可以在编译器中使用,GeographicRegion 可以在地图应用中使用。
如果您害怕具体化,命名空间和包会有所帮助。但是,没有什么会阻止您对一个类使用与另一个有意义的包相同的名称。类名特别不受版权保护,现在大多数 IDE 都足够智能,可以在使用自动完成时区分您所指的包。
在大多数情况下,特异性有助于帮助其他开发人员阅读您的代码,每个开发人员都会欣赏!