java中接口及其实现类的命名约定是什么?
Interface : ISomeService
Impl : SomeService
Run Code Online (Sandbox Code Playgroud)
或者
Interface : SomeService
Impl : SomeServiceImpl
Run Code Online (Sandbox Code Playgroud)
谢谢!
说出你的名字Interface是什么。Truck。不是ITruck因为它不是一个,ITruck而是一个Truck。Java 中的AnInterface是一种Type。然后你有DumpTruck, TransferTruck, WreckerTruck,CementTruck等。当你使用Interface Truck代替子类时,你只需将它转换为Truck。如在List<Truck>. 放在I前面只是蹩脚的匈牙利风格符号同义反复,它只会给你的代码添加更多的东西。
所有现代 Java IDE 都标记接口和实现,并且没有这种愚蠢的符号。不要称其TruckClass为同义反复,就像IInterface同义反复一样糟糕。
如果它是一个实现,那么它就是一个类。这条规则唯一真正的例外是,而且总是有例外AbstractTruck。由于只有子类才会看到这一点,并且您永远不应该转换为抽象类,因此它确实添加了一些关于该类是抽象的以及应该如何使用它的信息。您仍然可以想出一个比AbstractTruck并使用更好的名称BaseTruck。但由于Abstract类永远不应该成为任何面向公众的接口的一部分,因此这是一个可以接受的规则例外。
而且Impl后缀也只是更多噪音。更多同义反复。任何不是接口的东西都是实现,甚至是部分实现的抽象类。你打算Impl在每个班级的每个名字上都加上那个愚蠢的后缀吗?
这Interface是关于公共方法和属性必须支持的约定,它也是类型信息。实现的所有内容Truck都是的TypeTruck。
查看 Java 标准库本身。你有看到IList,ArrayListImpl,LinkedListImpl?不,你看。List和。ArrayList LinkedList这是一篇关于这个确切问题的好文章。任何这些愚蠢的前缀/后缀命名约定都违反了DRY原则。
此外,如果您发现自己向对象添加DTO、JDO或BEAN其他愚蠢的重复后缀,那么它们可能属于一个包而不是所有这些后缀。正确打包的命名空间是自记录的,并减少了这些构思不佳的专有命名方案中所有无用的冗余信息,而大多数地方甚至没有以一致的方式遵守这些命名方案。如果你能想出的让你的类名独一无二的办法就是在它后面加上 后缀Impl,那么你需要重新考虑是否有一个Interface。因此,当您遇到这样的情况:您有一个Interface和一个Implementation不是专门针对 的情况时Interface,您可能不需要Interface.