如何命名您创建的不同类/接口? 有时,我没有要添加到实现名称(如接口FileHandler和类SqlFileHandler)中的实现信息.

发生这种情况时,我通常使用"普通"名称命名接口,如Truck,然后将实际的类命名为TruckClass.

在这方面,您如何命名接口和类?

推荐答案

说出你的Interface个名字.不是ITruck因为它不是ITruck而是Truck.

在Java中,InterfaceType.然后你有DumpTruck,TransferTruck,WreckerTruck,CementTruck,等等,implements Truck.

当您使用Interface来代替子类时,只需将其强制转换为Truck即可.就像List<Truck>号一样.将I放在前面只是Hungarian style表示法tautology,它只会向代码中添加更多要键入的内容.

所有现代Java IDE的标记接口和实现等等都没有这个愚蠢的符号.不要称它为TruckClass,那是tautology,就像IInterface个同义重言式一样糟糕.

如果它是一个实现,那么它就是一个类.这条规则唯一真正的例外,也总是有例外,可能是AbstractTruck左右.因为只有子类才会看到这一点,而且您永远不应该强制转换到Abstract类,所以它确实添加了一些信息,说明该类是抽象的,以及应该如何使用它.你仍然可以想出一个比AbstractTruck更好的名字,用BaseTruckDefaultTruck代替,因为abstract在定义中.但是由于Abstract类永远不应该是任何面向公众的接口的一部分,我相信这是一个可以接受的例外.让施工人员成为protected人对于跨越这一鸿沟有很大帮助.

Impl后缀也只是更多的噪音.更多的同义反复.任何不是接口的东西都是一个实现,甚至是部分实现的抽象类.你要在每Class个人的名字上都加上那愚蠢的Impl后缀吗?

Interface是关于公共方法和属性必须支持的约定,它也是Type个信息.所有实现Truck的东西都是TruckType.

看看Java标准库本身.你看到IListArrayListImplLinkedListImpl了吗?不,你看ListArrayList,还有LinkedList.关于这个问题,这里有一个很好的答案.所有这些愚蠢的前缀/后缀命名约定都违反了DRY原则.

此外,如果你发现自己给对象添加了DTOJDOBEAN或其他愚蠢的重复后缀,那么它们可能属于package,而不是所有这些后缀.正确包装的名称空间是self 记录的,并减少了这些构思非常糟糕的专有命名方案中所有无用的冗余信息,而大多数地方甚至没有以一致的方式在内部遵循这些方案.

如果你能想出的让你的Class个名字独一无二的办法就是用Impl来填充它,那么你需要重新考虑用Interface.所以,当你有一个Interface和一个Implementation的情况下,你可能不需要Interface在大多数情况下,不是唯一专门从Interface.

但是,一般而言,出于可维护性、可测试性和模仿性的考虑,最佳实践是提供接口.请参见this answer for more details.

也请参考马丁·福勒关于InterfaceImplementationPair人主题的这篇有趣的文章

Java相关问答推荐

日食IDE 2024-03在Ubuntu下崩溃,导致hr_err_pid.log

SQlite for Android无法使用json_group_array/json_object

更新GWT 2.5.1到2.11.0和sencha GXT 3.1.1到4.1时出现错误

如何从错误通道回复网关,使其不会挂起

每次FXMLLoader调用ApplationConext.getBean(类)时创建@Component的新实例

Kotlin Val是否提供了与Java最终版相同的可见性保证?

有效的公式或值列表必须少于或等于255个字符

我怎样才能让IntelliJ标记toString()的任何实现?

是否为计划任务补偿系统睡眠?

Android Java:已设置但未读取SharedPreferences

错误:不兼容的类型:Double不能转换为Float

对角线填充二维数组

在不使用instanceof或强制转换的情况下从父类变量调用子类方法

循环不起作用只有第一个元素重复

基于Java中mm/dd/yy格式的最近日期对数组列表进行排序

如何在Spring Boot中为不同的部署环境管理多个.properties文件?

Java泛型方法重载

Java 21保护模式的穷尽性

Cucumber中第二个网页的类对象未初始化

@此处不能应用可为null的批注