2010-03-15 63 views
34

我們似乎正在從網頁中抽象出很多邏輯方式並創建「幫助」類。可悲的是,這些類都拉響相同,e.g類名稱中的「助手」一詞是否有代碼味道?

ADHelper,(活動目錄) AuthenicationHelper, SharePointHelper

是否有其他人有這個命名約定了大量的類?

+1

相關:http://stackoverflow.com/questions/562971/smelly-class-names – 2010-03-15 10:50:22

+1

http://objology.blogspot.com/2011/09/one-of-best-bits-of-programming-advice .html?spref = tw – 2011-09-27 13:56:30

回答

37

我會說它有資格作爲代碼味道,請記住,代碼味道不一定拼寫麻煩。這是你應該看看,然後決定是否可以。

話雖如此,我個人發現這樣的名字增加了很少的價值,因爲它是如此通用的類型可能很容易成爲一個非相關的效用方法的桶。即輔助班可能會變成大班,這是common code smells之一。

如果可能,我建議找到一個更接近描述方法的類型名稱。當然這可能會提示更多的助手類,但只要他們的名字有幫助,我不介意數字。

前段時間我在代碼審查過程中遇到了一個名爲XmlHelper的類。它有很多方法,顯然都與Xml有關。然而,從類型名稱中不清楚這些方法有什麼共同之處(除了與Xml相關)。事實證明,一些方法是格式化Xml和其他人解析Xml。所以海事組織這個班應該分成兩部分或更多部分,並且有更具體的名字。

-3

我不會說這是一種代碼味道。在ASP.NET MVC中,這很常見。

7

取決於類的實際內容。

如果大量的實際業務邏輯/業務規則幫助類,那麼我會說是。

如果這些類實際上只是可以在其他企業應用程序中使用的幫助器(絕對意義上的重複使用 - 不是複製然後自定義),那麼我會說助手不是代碼味道。

+0

考慮到業務邏輯的數量是一個好主意。 +1。 – OregonGhost 2010-03-15 10:40:35

12

一如既往,這取決於上下文。

當你與自己的API工作,我一定會認爲這是一個代碼味道,因爲FooHelper表明它Foo工作,但行爲很可能會直接屬於上Foo類。

然而,當你與現有的API(例如BCL中的類型)的工作,你不能改變的實施,使擴展方法成爲解決原來的API中的缺陷的方法之一。您可以選擇命名FooHelper以及FooExtension。它同樣臭(或不)。

7

這是一個有趣的觀點,如果一個單詞在名稱中變成'樣板文件',那麼它可能會有些微妙 - 如果不是真正的氣味。也許使用'Helper'文件夾,然後讓它出現在命名空間中,可以保持它的使用而不會過度使用這個單詞?

Application.Helper.SharePoint 
Application.Helper.Authentication 

4

在許多情況下,我使用類與Helper包含擴展方法的靜態類結束。對我來說似乎並不臭。你不能把它們放到一個非靜態的類中,而且類本身並不重要,所以我認爲Helper很好。無論如何,這樣的班級的用戶都不會看到班級名稱。

.NET框架也這樣做(例如在WPF的LogicalTreeHelper類中,它只有一些靜態(非擴展)方法)。

問問你自己,如果你的助手類中的代碼會被重構爲「真實」類,即適合你的類層次結構的對象,那麼代碼會更好。代碼在某個地方,如果你不能確定它真正屬於的類/對象,就像簡單的幫助函數(因此「助手」),你應該沒問題。

+0

我認爲很多ASP.NET Web Devs都使用靜態類,因爲他們熟悉它們並知道如何正確使用它們,例如:Console.WriteLine(「Hello World!」);但PHP Web Devs調用代碼味道。作爲Web開發人員,我們所要做的就是能夠重用我們的代碼並編寫乾淨鬆散耦合的組件。我使用靜態類來處理兩種語言的html輸出數據。我喜歡使用命名空間來組織我的助手,這樣我就可以在類名中省略單詞「助手」。 – yardpenalty 2016-04-06 02:35:50

相關問題