Java 中的接口命名 [已关闭]

2022-08-31 04:48:17

大多数OO语言的接口名称前面都用大写的I,为什么Java不这样做呢?不遵守这一公约的理由是什么?

为了说明我的意思,如果我想有一个用户界面和一个用户实现,我在Java中有两个选择:

  1. 类 = 用户,接口 = 用户接口
  2. 类 = 用户含义,接口 = 用户

在大多数语言中:

类 = 用户,接口 = IUser

现在,你可能会争辩说,你总是可以为用户实现选择一个最具描述性的名称,问题就消失了,但是Java正在推动POJO方法,大多数IOC容器都广泛使用DynamicProxies。这两件事加在一起意味着您将拥有许多具有单个POJO实现的接口。

所以,我想我的问题归结为:“是否值得遵循更广泛的接口命名约定,特别是考虑到Java框架似乎正在走向何方?


答案 1

我不喜欢在接口上使用前缀:

  • 前缀会损害可读性。

  • 在客户端中使用接口是标准的最佳编程方式,因此接口名称应尽可能简短和令人愉快。实现类应该更丑陋,以阻止它们的使用。

  • 当从抽象类更改为接口时,带有前缀的编码约定I意味着重命名该类的所有实例---不好!


答案 2

以下方面真的有区别吗:

class User implements IUser

class UserImpl implements User

如果我们谈论的只是命名约定?

就个人而言,我更喜欢不在接口之前,因为我想编码到接口,我认为这在命名约定方面更为重要。如果调用接口,则该类的每个使用者都需要知道它是 .如果调用类,则只有类和 DI 容器知道该部件,而使用者只知道他们正在使用 .IIUserIUserUserImplImplUser

再说一遍,我被迫使用的时间很少,因为一个更好的名称不会出现,因为实现是根据实现命名的,因为这是它很重要的地方,例如。Impl

class DbBasedAccountDAO implements AccountDAO
class InMemoryAccountDAO implements AccountDAO