今天早上我仔细研究TopShelf项目的源代码,想追查里面一个API的修改,突然发现TopShelf终于向新近流行的去掉接口名称上的“I”字母做法屈服了。在.NET上这还是个新事物,使用Java的人这样做了有一段时间了,但在.NET里很多都还是新事物。这些可不是从ruby偷来的。
如果你对此不太熟悉,我先解释一下,传统的习惯是在接口的名称前加入一个毫无必要的“I”字母,事实上这个接口的使用者并不在意这个接口前是否有个“I”字母,这种加入“I”字母的形式是一种匈牙利标记法,文明世界里几乎一致认为这是一种糟糕的做法。
所以你的代码…
1
|
public
interface
ISomeBehavior { }
|
..应该写成..
1
|
public
interface
SomeBehavior { }
|
这样合情合理。而有问题的是当你把一个实现这个接口的类像下面这样命名时:
1
|
public
interface
SomeBehavior { }
|
2
|
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
|
public
interface
ICalculateRates { }
//我计算比例
|
3
|
public
interface
ISingAndDance {
|
你会发现这和传统的“I”/“Impl”用法相反。但这很酷不是?每个“I”都代表我,但这该死的“Impl”里不是。
:)
分享到:
相关推荐
开发工具 taglibs-standard-impl-1.2.5开发工具 taglibs-standard-impl-1.2.5开发工具 taglibs-standard-impl-1.2.5开发工具 taglibs-standard-impl-1.2.5开发工具 taglibs-standard-impl-1.2.5开发工具 taglibs-...
jstl-api-1.2和jstl-impl-1.2,jstl-api-1.2和jstl-impl-1.2,jstl-api-1.2和jstl-impl-1.2,jstl-api-1.2和jstl-impl-1.2
赠送jar包:jjwt-impl-0.11.2.jar; 赠送原API文档:jjwt-impl-0.11.2-javadoc.jar; 赠送源代码:jjwt-impl-0.11.2-sources.jar; 赠送Maven依赖信息文件:jjwt-impl-0.11.2.pom; 包含翻译后的API文档:jjwt-impl-...
jstl-api-1.2、jstl-impl-1.2.jar标签包,两份。
impl实现层,如何实现dao层,然后展现业务逻辑,是很好的例子
jaxb-impl-2.1.jar
赠送jar包:avalon-framework-impl-4.3.1.jar; 赠送原API文档:avalon-framework-impl-4.3.1-javadoc.jar; 赠送源代码:avalon-framework-impl-4.3.1-sources.jar; 赠送Maven依赖信息文件:avalon-framework-impl...
jsf-api.jar和jsf-impl
jaxb-impl-2.0.3.jar 可用包
赠送jar包:jjwt-impl-0.11.2.jar; 赠送原API文档:jjwt-impl-0.11.2-javadoc.jar; 赠送源代码:jjwt-impl-0.11.2-sources.jar; 赠送Maven依赖信息文件:jjwt-impl-0.11.2.pom; 包含翻译后的API文档:jjwt-impl-...
jstl-impl-1.2.2.jar!
impl, impl生成用于实现接口的方法存根 impl 生成用于实现接口的方法存根。go get -u github.com/josharian/impl示例用法:$ impl 'f *File' io.ReadWriteCloserfunc (f *File
jsf-impl-1.2_12 源码 jar
赠送jar包:rpc-grpc-impl-1.3.8.jar; 赠送原API文档:rpc-grpc-impl-1.3.8-javadoc.jar; 赠送源代码:rpc-grpc-impl-1.3.8-sources.jar; 赠送Maven依赖信息文件:rpc-grpc-impl-1.3.8.pom; 包含翻译后的API文档...
赠送jar包:log4j-slf4j-impl-2.12.1.jar; 赠送原API文档:log4j-slf4j-impl-2.12.1-javadoc.jar; 赠送源代码:log4j-slf4j-impl-2.12.1-sources.jar; 赠送Maven依赖信息文件:log4j-slf4j-impl-2.12.1.pom; ...
赠送jar包:log4j-slf4j-impl-2.12.1.jar; 赠送原API文档:log4j-slf4j-impl-2.12.1-javadoc.jar; 赠送源代码:log4j-slf4j-impl-2.12.1-sources.jar; 赠送Maven依赖信息文件:log4j-slf4j-impl-2.12.1.pom; ...
jaxb-impl-2.1.jar包很有作用的,希望你们能喜欢
赠送jar包:log4j-slf4j-impl-2.17.1.jar; 赠送原API文档:log4j-slf4j-impl-2.17.1-javadoc.jar; 赠送源代码:log4j-slf4j-impl-2.17.1-sources.jar; 赠送Maven依赖信息文件:log4j-slf4j-impl-2.17.1.pom; ...
aether-impl-1.7.jar
jsf-impl包,具体做什么的我还真不清楚,欢迎下载,jsf工具包中的一个