2012-03-12 65 views
7

我有一個從數據庫中提取數據的方法,我希望它得到這樣的:命名複雜的方法

極限的五

項, 項目類型是通訊, 需要被激活(PublishDate <日期時間。現在)

所以我想它命名GetFiveActiveNewslettersByCreatedDate的()

這似乎有點長了我。我在網站上看到了一個很好的方式來命名這樣的事情,你將如何處理它?

+3

這個名字本身沒有錯。或者,你可以有一個方法,將最大數字作爲參數返回。 – 2012-03-12 19:19:24

+3

硬編碼爲5是一種不好的做法。我建議你簽署以下簽名:'GetActiveNewsletters(int32 size)' – Oybek 2012-03-12 19:20:17

+1

進一步使用'ByCreatedDate'是多餘的,因爲'Active'已經帶有時間謂詞的含義。如果你使用'ByCreatedDate',這意味着你正在選擇一個額外的謂詞。 – Oybek 2012-03-12 19:23:14

回答

4

爲了避免這個特定的命名,我會考慮使該方法通用。類似於:

GetNewsLetters(int amount, bool onlyActive, SortOrder orderBy) 
12

這樣的事情呢?

public IEnumerable<Newsletter> GetActiveNewsletters(int maxRecords = 5) 
{ 
    // ... 
} 

Top 5仍然是默認設置,但它不再是過分具體。

+4

我建議不要公開默認參數,因爲它們被編譯到調用程序集中,如果更新調用程序集而不重新編譯和重新部署所有調用者,這會導致微妙的錯誤。 – 2012-03-12 19:25:29

+0

@MichaelStum:好點。我想這取決於情況。對於許多/大多數應用程序來說,這可能不是一個問題,因爲它可能會像公共API那樣。 – 2012-03-12 20:07:25

1

我想補充參數化方法,像

GerEntries(T typeofEntity, DateTime date, int maxNumber)

而且天然化文檔的方法與評價

5

我會推薦它重命名爲:GetNewsletters(int recordCount=5) 通訊的數量將是該方法的參數。

其餘的可以假設和描述在///Summary

+1

+1提及'/ /摘要' – Oybek 2012-03-12 19:24:16

2

將其命名,以便對任何開發人員明白該方法的作用。自我評論代碼是國王。如果您的方法名稱太長,您可能在其中做了太多不同的事情,並且會成爲重構的候選人。

至於你的具體例子,我沒有與你給的名字有關的問題。

8

我會避免在個人名義上烘烤「五」的原因是它可能意味着什麼。

例如,如果以後,在某些情況下需要10個新聞稿而不是5個?那麼,你會創建一個額外的方法GetTenActiveNewslettersByCreatedDate()。而現在,你有一個'設計模式',隨後的開發者將需要20,50,100條新聞通訊。這是一個會腐爛的設計,現在可以通過參數化五個參數來保存它。

當然,這可能是YAGNI /投機一般性。如果5真的是某種魔法,堅硬的,永遠不會改變的規則,那麼你可以小心翼翼地把它燒掉。我只是覺得我已經後悔了,並且看到了這樣的事情,而且往往不是這樣。