【发布时间】:2011-08-14 14:07:38
【问题描述】:
我目前正在阅读 Rober Martin (UncleBob) 的“清洁代码”,并且总体上喜欢 UncleBob 的沉思。但是,当我读到他避免为“IPerson”之类的接口添加前缀时,我有点困惑。他说“我不希望我的用户知道我正在给他们一个界面”。
从 TDD/注入的角度思考,我总是很想告诉我的类的“用户”我正在处理一个接口。主要原因是我认为系统的不同“代理”之间的接口契约。一个代理在我系统的一个角落工作,不应该知道另一个代理工作的具体实现;他们应该只交换合同,并期望在不知道如何履行的情况下履行合同。另一个也是非常重要的原因是接口可以完全模拟,从而使单元测试更容易。你可以在一个具体的类上模拟多少是有限制的。
因此,我更喜欢想象我确实在处理一个接口......或者将一个接口作为参数。但是由于 UncleBob 是我们社区中的重量级冠军,而我只是另一个蝇量级的桌面骑师,我想知道我是否遗漏了什么。
我坚持我在接口中是错误的吗??
【问题讨论】:
-
我认为这是一个偏好问题。虽然,在大多数语言中,在接口前加上 I 是一种惯例。
-
@Kevin 大多数语言?
-
@Cumbayah 应该更精确一点。 大部分我实际上是指:Java、C# 和 VB.NET。
-
@Kevin 实际上,Java 类库中的标准是不为接口添加前缀(而是在必要时在具体类上添加 Impl 后缀)。
-
@Kevin, @Cumbayah:I-Prefix 约定起源于微软在 C++ 中的 COM,并且被广泛使用。这就解释了为什么尽管它不在 Sun 的代码约定中(大多数 Java 程序员都遵循),但它在 Java 中得到了一些关注,以及为什么它是 .Net 的官方约定
标签: unit-testing interface dependency-injection tdd coding-style