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

jopen 8年前發布 | 6K 次閱讀 .NET

英文原文:Why drop the I if you’re going to just add an Impl?

今天早上我仔細研究 TopShelf 項目的 源代碼 ,想追查里面一個API的修改,突然發現TopShelf終于向新近流行的去掉接口名稱上的“I”字母做法屈服了。在.NET上這還是個新事物,使用Java的人這樣做了有一段時間了,但在.NET里很多都還是新事物。這些可不是從ruby偷來的。

如果你對此不太熟悉,我先解釋一下,傳統的習慣是在接口的名稱前加入一個毫無必要的“I”字母,事實上這個接口的使用者并不在意這個接口前是否有個“I”字母,這種加入“I”字母的形式是一種 匈牙利標記法 ,文明世界里幾乎一致認為這是一種糟糕的做法。

所以你的代碼…

public interface ISomeBehavior { }

..應該寫成..

public interface SomeBehavior { }

這樣合情合理。而有問題的是當你把一個實現這個接口的類像下面這樣命名時:

public interface SomeBehavior { } public class SomeBehaviorImpl { }

我不知道把接口上的“I”移到實現類上然后再加三個字母究竟有什么好處。除了讓我的指頭關節多活動幾下還能做什么?難道這個程序的使用方還在意這是一個沒有“I”的接口實現類嗎?

從一些基礎層面上講,接口就是個契約。契約聲明一個類要實現接口提供的特定用途的一些方法和屬性。從另一個角度看這個問題可以觀察接口的行為。

考察一下.NET里提供的 IDisposable 這個接口。沒有一個DisposableImpl伴隨著它。這個接口描述的是一個實現類型的特征,它可以代表任何的東西。

接口跟實現類并不是一對一的關系。事實上,一個類可以實現多個接口。引用 Brett L. Schuchert 的例子:

class Manager : public ISing, public IDance {}

保持簡潔的接口,讓manager們盡情放縱

我相信你看到這里已經露出憤怒的表情了,會想“那好,聰明人,你想讓我們怎么做?”

對于我,我喜歡這個“I”字母,但喜歡的是它讀起來像一種聲明。

public interface IReadFiles { }//我讀取文件public interface ICalculateRates { }//我計算比例public interface ISingAndDance { }//我唱歌跳舞

你會發現這和傳統的“I”/“Impl”用法相反。但這很酷不是?每個“I”都代表我,但這該死的“Impl”里不是。

來自: http://www.techug.com/drop-the-i-if-youre-going-to-just-add-an-impl

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!