干嘛不去掉“I”和“Impl”?

开发 后端
今天早上我仔细研究TopShelf项目的源代码,想追查里面一个API的修改,突然发现TopShelf终于向新近流行的去掉接口名称上的“I”字母做法屈服了。在.NET上这还是个新事物,使用Java的人这样做了有一段时间了,但在.NET里很多都还是新事物。这些可不是从ruby偷来的。

今天早上我仔细研究TopShelf项目的源代码,想追查里面一个API的修改,突然发现TopShelf终于向新近流行的去掉接口名称上的“I”字母做法屈服了。在.NET上这还是个新事物,使用Java的人这样做了有一段时间了,但在.NET里很多都还是新事物。这些可不是从ruby偷来的。

如果你对此不太熟悉,我先解释一下,传统的习惯是在接口的名称前加入一个毫无必要的“I”字母,事实上这个接口的使用者并不在意这个接口前是否有个“I”字母,这种加入“I”字母的形式是一种匈牙利标记法,文明世界里几乎一致认为这是一种糟糕的做法。

所以你的代码…

 

  1. public interface ISomeBehavior { } 

..应该写成..

 

  1. public interface SomeBehavior { } 

这样合情合理。而有问题的是当你把一个实现这个接口的类像下面这样命名时:

 

  1. public interface SomeBehavior { }    
  2.  
  3. public class SomeBehaviorImpl { }   

 

我不知道把接口上的“I”移到实现类上然后再加三个字母究竟有什么好处。除了让我的指头关节多活动几下还能做什么?难道这个程序的使用方还在意这是一个没有“I”的接口实现类吗?

从一些基础层面上讲,接口就是个契约。契约声明一个类要实现接口提供的特定用途的一些方法和属性。从另一个角度看这个问题可以观察接口的行为。

考察一下.NET里提供的IDisposable这个接口。没有一个DisposableImpl伴随着它。这个接口描述的是一个实现类型的特征,它可以代表任何的东西。

接口跟实现类并不是一对一的关系。事实上,一个类可以实现多个接口。引用Brett L. Schuchert的例子:

 

  1. class Manager : public ISing, public IDance {} 

保持简洁的接口,让manager们尽情放纵

我相信你看到这里已经露出愤怒的表情了,会想“那好,聪明人,你想让我们怎么做?”

对于我,我喜欢这个“I”字母,但喜欢的是它读起来像一种声明。

 

  1. public interface IReadFiles { } //我读取文件  
  2.  
  3. public interface ICalculateRates { } //我计算比例  
  4.  
  5. public interface ISingAndDance { //我唱歌跳舞}  

你会发现这和传统的“I”/“Impl”用法相反。但这很酷不是?每个“I”都代表我,但这该死的“Impl”里不是。

【编辑推荐】

  1. Java开发者需要注意的十条法则
  2. 新手入门JavaWeb三层架构的配置详解
  3. Java垃圾收集器使用小诀窍
  4. 高性能Java代码之内存管理
责任编辑:金贺 来源: ITEYE博客
相关推荐

2021-08-03 09:59:43

HTTPSTCP网络协议

2021-03-11 08:50:58

Spring容器接口

2019-01-29 11:08:48

NginxApacheHTTP协议

2011-02-02 00:54:45

2017-07-14 09:57:47

共享经济物联网大数据

2019-04-26 13:55:02

Istio微服务架构

2022-03-14 09:39:06

PythonPDF图片

2021-03-11 07:27:17

CPU空闲代码

2020-10-16 09:18:29

Nginx

2020-09-29 10:20:02

Java编程语言

2018-10-11 09:00:09

2015-04-02 09:44:56

云计算成本评估

2022-02-21 22:58:25

排序rowid 排序优化

2023-09-28 08:21:20

i++++i高并发

2022-12-08 09:10:11

I/O模型Java

2013-08-26 09:15:38

百度轻应用

2017-11-17 08:59:00

2024-01-22 04:00:00

2019-02-25 08:28:53

2018-11-06 21:30:44

jQuery前端API
点赞
收藏

51CTO技术栈公众号