在java中命名接口及其实现类的约定是什么?
Interface : ISomeService
Impl : SomeService
或
Interface : SomeService
Impl : SomeServiceImpl
谢谢!
答案 0 :(得分:4)
为您的Interface
命名。 Truck
。不是ITruck
,因为它不是ITruck
,而是Truck
。 Java中的Interface
是Type。然后,您有DumpTruck
,TransferTruck
,WreckerTruck
,CementTruck
等。当您使用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标准库本身。您看到ArrayListImpl
,LinkedListImpl
,List
了吗?不,你看。 ArrayList
以及LinkedList
和DTO
。关于这个确切的问题,这是一个很好的Type。任何这些愚蠢的前缀/后缀命名约定都会违反article主体。
此外,如果您发现自己向对象添加了JDO
,BEAN
,Impl
或其他愚蠢的重复后缀,那么它们可能属于DRY而不是所有这些后缀。正确打包的命名空间是自我记录的,并且在这些非常缺乏构思的专有命名方案中减少了所有无用的冗余信息,大多数地方甚至不以一致的方式遵守这些命名方案。如果您只想使用Interface
将其命名为唯一,那么您需要重新考虑使用Interface
。因此,当您遇到Implementation
和单Interface
的情况时,Interface
可能不需要{{1}}。{ p>