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

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

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


当前回答

接口的名称应该描述接口所代表的抽象概念。任何实现类都应该有某种特定的特征,可以用来给它一个更具体的名称。

如果只有一个实现类,并且您想不出任何使它特定的东西(因为想要将其命名为-Impl),那么看起来根本没有理由有接口。

其他回答

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

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

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

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

接口的名称应该描述接口所代表的抽象概念。任何实现类都应该有某种特定的特征,可以用来给它一个更具体的名称。

如果只有一个实现类,并且您想不出任何使它特定的东西(因为想要将其命名为-Impl),那么看起来根本没有理由有接口。

我使用这两种习惯:

如果接口是一个已知模式(例如Service, DAO)的特定实例,那么它可能不需要“I”(例如UserService, AuditService, UserDao),没有“I”都可以正常工作,因为后修正决定了元模式。

但是,如果你有一些一次性或两次的东西(通常是回调模式),那么它有助于将它与类区分开来(例如IAsynchCallbackHandler, IUpdateListener, IComputeDrone)。这些是为内部使用而设计的特殊用途的接口,有时IInterface会引起注意,操作数实际上是一个接口,因此乍一看就很清楚了。

在其他情况下,您可以使用I来避免与其他常见的具体类(issubject, IPrincipal vs Subject或Principal)发生冲突。