【问题标题】:convention to name interface and implementation? [duplicate]命名接口和实现的约定? [复制]
【发布时间】:2013-12-01 17:19:53
【问题描述】:

java中接口及其实现类的命名约定是什么?

Interface : ISomeService
Impl : SomeService

Interface : SomeService
Impl : SomeServiceImpl

谢谢!

【问题讨论】:

    标签: java


    【解决方案1】:

    为您的Interface 命名。 Truck。不是ITruck,因为它不是ITruck,而是Truck。 Java 中的InterfaceType。然后你有DumpTruckTransferTruckWreckerTruckCementTruck 等。当你使用Interface Truck 代替子类时,你只需将其转换为Truck。如List<Truck>。将I 放在前面只是蹩脚的匈牙利风格符号tautology,它只会为您的代码添加更多内容。

    所有现代 Java IDE 的标记接口和实现以及没有这个愚蠢的符号。不要称它为TruckClass,即tautologyIInterface 重言式一样糟糕。

    如果它是一个实现,它就是一个类。这条规则唯一真正的例外是AbstractTruck,而且总是有例外。由于只有子类会看到这一点,并且您永远不应该转换为抽象类,它确实添加了一些关于该类是抽象的信息以及应该如何使用它。您仍然可以想出一个比AbstractTruck 更好的名称,并改用BaseTruck。但由于Abstract 类永远不应成为任何面向公众的接口的一部分,因此它是可接受的规则例外。

    Impl 后缀也只是更多的噪音。更多的重言式。任何不是接口的东西都是实现,即使是部分实现的抽象类。你要在每个Class 的每个名字上加上那个愚蠢的Impl 后缀吗?

    Interface 是关于公共方法和属性必须支持的合同,它也是Type 信息。实现Truck 的所有东西都是TypeTruck

    查看 Java 标准库本身。你看到IListArrayListImplLinkedListImpl了吗?不,你看。 ListArrayListLinkedList。这是一个很好的article 关于这个确切的问题。任何这些愚蠢的前缀/后缀命名约定都违反了DRY 原则。

    此外,如果您发现自己在对象中添加DTOJDOBEAN 或其他愚蠢的重复后缀,那么它们可能属于package,而不是所有这些后缀。正确打包的命名空间是自我记录的,并减少了这些构思拙劣的专有命名方案中的所有无用冗余信息,大多数地方甚至都没有以一致的方式遵守这些命名方案。如果你能想出让你的类名唯一的方法就是在它后面加上Impl,那么你需要重新考虑使用Interface。因此,当您遇到Interface 和单个Implementation 不是从Interface 唯一专门化的情况时,您可能不需要Interface

    【讨论】:

      猜你喜欢
      • 2011-02-18
      • 2013-03-13
      • 2014-04-30
      • 1970-01-01
      • 2016-12-15
      • 2016-07-06
      • 2010-10-15
      • 2014-12-07
      • 1970-01-01
      相关资源
      最近更新 更多