命名接口和实现的约定?

时间:2013-11-18 14:08:55

标签: java

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

Interface : ISomeService
Impl : SomeService

Interface : SomeService
Impl : SomeServiceImpl

谢谢!

1 个答案:

答案 0 :(得分:4)

为您的Interface命名。 Truck。不是ITruck,因为它不是ITruck,而是Truck。 Java中的InterfaceType。然后,您有DumpTruckTransferTruckWreckerTruckCementTruck等。当您使用Interface Truck代替子你只需将它投射到Truck。与List<Truck>中一样。将I置于前面只是一种糟糕的匈牙利风格符号tautology,它只会为您的代码添加更多内容。

所有现代Java IDE都标记了接口和实现以及没有这种愚蠢符号的东西。不要将TruckClass称为tautology,与IInterface重言式一样糟糕。

如果它是一个实现它是一个类。这个规则唯一真正的例外,总是存在异常AbstractTruck。由于只有每个子类都会看到这个并且您永远不应该转换为Abstract类,因此它会添加一些类是抽象的信息以及它应该如何使用。您仍然可以提供比AbstractTruck更好的名称,并使用BaseTruck代替。但由于Abstract类永远不应成为任何面向公众的接口的一部分,因此该规则是可接受的例外。

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

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

查看Java标准库本身。您看到ArrayListImplLinkedListImplList了吗?不,你看。 ArrayList以及LinkedListDTO。关于这个确切的问题,这是一个很好的Type。任何这些愚蠢的前缀/后缀命名约定都会违反article主体。

此外,如果您发现自己向对象添加了JDOBEANImpl或其他愚蠢的重复后缀,那么它们可能属于DRY而不是所有这些后缀。正确打包的命名空间是自我记录的,并且在这些非常缺乏构思的专有命名方案中减少了所有无用的冗余信息,大多数地方甚至不以一致的方式遵守这些命名方案。如果您只想使用Interface将其命名为唯一,那么您需要重新考虑使用Interface。因此,当您遇到Implementation和单Interface的情况时,Interface可能不需要{{1}}。