乐者为王

Do one thing, and do it well.

我们真的需要接口命名规范吗?

英文原文:http://www.adam-bien.com/roller/abien/entry/in_the_age_of_dryness

译者:感觉这篇文章讲的不错,也不算太长,就翻译了过来。

在过去的项目/审查中我发现了如下的接口及其实现的命名规范:

1
2
3
4
5
IService service = new Service();

Service service = new ServiceImpl();

ServiceIF service = new Service();

每一条都含有多余信息。无论是强调接口或其实现,相关信息都已经包含在代码中,所以都是多余的。这种命名规范仅当你真的不知道如何命名实现的时候才需要,作为去思考一个名称的替代,它更容易依靠现有的模板。

实现名称的缺乏可能也是作为它的非充分责任的一个指标(an indicator for it's unsufficient responsibilities)。因此,如果你找不到一个适当的实现名称,考虑移除接口直接暴露实现可能是个好主意——没有奇怪的规范。实际上JDK中没有这样的规范,接口及其实现也经常称为不同(are often even called differently):

1
2
3
4
5
6
7
Runnable r = new Thread();

RootPaneContainer c = new JFrame();

TableModel t = new DefaultTableModel();

Remote remote = new UnicastRemoteObject();

接口的目的是抽象或从几个实现解耦。一个单一的实现并不需要通过接口来解耦。也有一些例外的规则,如需要使用动态代理等。

通过单个的,有着奇怪命名规范的实现(implementation)来实现(realize)一个接口不应该被认为是一般的最佳实践……

Comments