2008-08-06 107 views
36

我已經看到這些使用每一種方式,並被指控使用他們錯誤的方式(雖然在那種情況下,我用他們的方式來演示point)。在.Net中使用擴展方法的最佳做法是什麼?

那麼,您認爲採用擴展方法的最佳實踐是什麼?

開發團隊是否應該創建一個擴展方法庫並將其部署到各個項目中?

是否應該有一個開源項目形式的常見擴展方法的集合?

更新:決定創建一個組織廣泛的擴展方法庫

回答

2

我認爲這取決於擴展方法服務的目的。這涉及到一個項目的特定業務需求(無論是連接到基本數據類型或自定義對象)

  • 擴展方法不應該被包括在將在多個項目分佈的庫。
  • ,涉及到具有更廣泛的應用基本數據類型(int,字符串等)或泛型擴展方法可以被包裝並跨項目分佈。

請小心不要在全球範圍內包含幾乎沒有應用的擴展方法,因爲它們只會阻塞智能感知並可能導致混淆和/或誤用。

+0

好的。那是對的。 但應該有更具體的指導方針。 (例如,是否應擴展對象類?) 應該擴展第三方庫嗎? – Vaibhav 2011-01-18 20:08:33

3

我一直在包括與在utils的班級我的核心庫,因爲誰是我的框架內工作的人可能會發現這些方法有用,但對於大規模部署,其中最終開發人員可能的選擇,我的擴展方法擴展方法庫,需要時我會建議把所有的擴展成自己的命名空間,甚至自己的項目文件,使人們可以選擇添加引用或using語句或簡單地說,就像這樣:

Core.Extensions.Base64Encode(str); 

My Utils課程是我在全世界的最好朋友,它是在擴展方法出現之前,它們只有幫助我們加強了我們的關係。我要做的最大規則是讓人們選擇他們正在使用的擴展框架。

3

20世紀90年代以來早期的Objective-C語言已經有「分類」;這些與.NET擴展方法基本相同。當尋找最好的做法,您可能希望看到拇指的Objective-C的規則(可可& NEXT)開發商已經想出他們周圍。

Brent Simmons(Mac OS X和iPhone的NetNewsWire RSS閱讀器的作者)今天剛剛發佈了關於他的new style rules for the use of categories,並且在那篇文章中有一段discussion in the Cocoa community

7

框架設計指南即將發佈的第二版將會擁有實現擴展方法的一些指導,但一般:

你應該只定義的擴展方法「他們使語義意義」,並提供輔助功能與每個實施相關。

你也應該避免延長System.Object的,因爲不是所有的.NET語言將能夠調用擴展方法作爲擴展。 (VB.NET例如需要調用它作爲靜態擴展類常規的靜態方法。)

,除非你擴展接口,不要在同一個命名空間中定義的擴展方法作爲擴展型。

不要將具有相同簽名的擴展方法定義爲「真實」方法,因爲它永遠不會被調用。

1

當我第一次發現關於擴展的時候,我真的被濫用和濫用了它們。

對於大多數情況下,我已經開始放棄使用任何擴展方法。

一些原因,我停止使用它們上面斯科特的博客鏈接都指出,如「擴展類型,請三思而後你沒有自己」。如果您無法控制要擴展的類型的源,那麼如果源類型有一些添加/更改(如將項目移動到更新的.NET版本),您將來可能會遇到問題/衝突。如果較新的.NET版本包含與擴展名同名的類型的方法,則會有人遭到破壞。

的最主要的原因,我停止使用擴展方法是,你不能迅速地從閱讀代碼告訴那裏的法源是和誰「擁有」它。

當剛剛通過讀碼,你不能告訴的方法是對類型的擴展名或只是一個標準NET API方法。

智能感知菜單真的很麻煩。

相關問題