你如何命名你创建的不同的类/接口? 有时我没有实现信息可以添加到实现名称中——比如接口FileHandler和类SqlFileHandler。

当这种情况发生时,我通常将接口命名为“正常”名称,如Truck,并将实际的类命名为TruckClass。

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


当前回答

我喜欢指示接口描述的契约的接口名称,例如“可比的”或“序列化的”。像“卡车”这样的名词并不能真正描述卡车——卡车的能力是什么?

关于惯例:我曾经工作过的项目中,每个界面都以“I”开头;虽然这与Java惯例有些不同,但它使查找接口变得非常容易。除此之外,“Impl”后缀是一个合理的默认名称。

其他回答

我喜欢指示接口描述的契约的接口名称,例如“可比的”或“序列化的”。像“卡车”这样的名词并不能真正描述卡车——卡车的能力是什么?

关于惯例:我曾经工作过的项目中,每个界面都以“I”开头;虽然这与Java惯例有些不同,但它使查找接口变得非常容易。除此之外,“Impl”后缀是一个合理的默认名称。

TruckClass听起来像是Truck的一个类,我认为推荐的解决方案是添加Impl后缀。在我看来,最好的解决方案是在实现名称中包含一些信息,在特定的实现中发生了什么(就像我们有List接口和实现:ArrayList或LinkedList),但有时你只有一个实现,并且由于远程使用(例如)必须有接口,那么(如开头提到的)Impl是解决方案。

标准的c#约定(在Java中也很好用)是给所有接口加上一个I前缀,所以你的文件处理程序接口将是IFileHandler,你的卡车接口将是ITruck。它是一致的,并且很容易区分接口和类。

有些人不喜欢这样,它更像是。net的约定而不是Java,但是你可以用大写的I前缀来命名你的接口,例如:

IProductRepository - interface
ProductRepository, SqlProductRepository, etc. - implementations

反对这种命名约定的人可能会争辩说,您不应该关心您在代码中使用的是接口还是对象,但我发现它更容易快速阅读和理解。

我不会用“class”后缀来命名实现类。这可能会导致混乱,因为您实际上可以在代码中使用“类”(即类型)对象,但在您的情况下,您不是在使用类对象,而是在使用普通的旧对象。

我倾向于遵循Java Core/Sun建立的伪约定,例如在Collections类中:

List -“概念性”对象的接口 数组列表接口的具体实现 接口的具体实现 AbstractList——抽象的“部分”实现,以帮助自定义实现

我曾经在AWT事件/监听器/适配器范例之后做同样的事情来建模我的事件类。