對於代碼行中的「獲取」大小是否有任何指導原則或普遍共識?我有一個成員的Get方法,在這裏很容易增長到30行代碼。我不確定在什麼時候這應該被拉入方法。但是,我只是將它稱爲GetMyString,然後將值賦給另一個成員,並在構造函數中調用它。獲取方法的大小
是否值得這樣做?
這對SO來說太主觀了嗎?
對於代碼行中的「獲取」大小是否有任何指導原則或普遍共識?我有一個成員的Get方法,在這裏很容易增長到30行代碼。我不確定在什麼時候這應該被拉入方法。但是,我只是將它稱爲GetMyString,然後將值賦給另一個成員,並在構造函數中調用它。獲取方法的大小
是否值得這樣做?
這對SO來說太主觀了嗎?
dcastro的答案是好的,但可以使用一些擴展:
那不是量化;讓我們量化一下。一個財產不應超過比獲得一個領域所需的時間長十倍。
這些都是緩慢的,因此通常第一個規則下摔倒,但這個第二個方面:故障應難得或不可能。屬性獲取者不應該拋出異常。
我想澄清的是,以觀察到副作用。屬性獲取器通常會產生副作用,即他們只計算一次屬性並稍後緩存它,但這不是可觀察的副作用。
不僅在哲學上讓屬性產生可觀察的副作用,它還會弄亂您的調試體驗。請記住,當您在調試器中默認查看對象時,調試器會自動調用其屬性getters並顯示結果。如果這樣做很慢,那麼這會減慢調試速度。如果這樣做可能會失敗,那麼您的調試體驗將充滿失敗消息。如果這樣做有副作用,那麼調試程序會改變程序的工作方式,這可能會使得很難找到該錯誤。您當然可以關閉自動屬性評估功能,但最好先設計好的屬性。
這是一個常見的不好的做法,將一大堆行放入Get方法中。 我在Visual Studio中安裝了一個名爲CodeMaid的東西。它有一種叫做CodeMaid Spade的方法,它爲每種方法評分並給你一個分數。分數越高,您的方法越糟糕。它也可以用於屬性。我建議你試一試,它有助於格式化,縮進和其他一些良好做法
這不是真正重要的大小(沒有雙關語意圖)。 它的確定有你的邏輯在吸氣只要
這些只是適當的財產使用的一些準則。
編輯
上述原則都有一個理想:屬性訪問應該表現得像數據訪問,因爲這是用戶所期望的。
從書有效的C#由比爾·瓦格納:
屬性是可以從調用代碼類似 數據被視爲方法。這會給用戶的頭部帶來一些期望。他們將 看到一個屬性訪問,就好像它是一個數據訪問。畢竟, 這就是它的樣子。您的財產訪問者應該不辜負那些期望。獲取訪問者不應該有可觀察的一面 影響。 Set訪問者修改狀態,用戶應該能夠 看到這些變化。
屬性訪問器對您的用戶也有性能 的期望。屬性訪問看起來像一個數據字段 訪問。它不應該具有與簡單的數據訪問明顯不同的性能特徵,即 。
屬性訪問 不應執行冗長的計算,或者進行跨應用 調用(如執行數據庫查詢),或做其他冗長 操作,這將是與你的用戶對屬性訪問的期望 不一致。
加成阿爾貝託:http://msdn.microsoft.com/en-us/library/vstudio/ms229054%28v=vs.100%29.aspx
這正是我正要寫的。如果你問我,「副作用」部分是最重要的。 –
+1。任意線限制就是 - 任意的。我們應該儘可能小 - 但是由於任意限制而將方法分開可能會妨礙可讀性。 –
我想添加一個很好的閱讀關於屬性和方法之間的選擇:http://msdn.microsoft.com/en-us/library/vstudio/ms229054%28v=vs.100%29.aspx – Alberto
作爲一般準則,一個方法應該不會有在一個屏幕上比配合更多的行。如果你必須滾動,它太大了。將它分成更小的方法。
我相信方法應儘可能小而且不要小。僅僅因爲一些任意的限制(一個屏幕 - 什麼分辨率?)將方法分解到其他方法 - 可能會妨礙可讀性。常識超出了任意限制。 –
誰的屏幕? :)有時可以用很長的方法。只有邏輯應該決定一個方法的大小。 –
這不一定是壞事,但如果是我,它會讓我緊張,我會試圖以某種方式嘗試並分解它。吸氣劑是一種簡單的方法,只要將整件事物拖入30多條線的方法就會浪費我的時間。我會努力把它切碎。例如。如果它是一個帶有一些檢查的循環,則將檢查提取爲方法或其他類型。
我並不清楚特性的具體指導原則,但許多最佳編碼實踐將7-10行用作一種方法中的首選行數。 –
你的吸氣劑在做什麼? –
好問題。 getter被用於包含類似於以下文章的功能的類中:http://umerpasha.wordpress.com/2013/06/13/c-code-to-get-latest-tweets-using-twitter-api- 1-1 /你會注意到那裏有很多刺(例如baseString),可以從該類的其他成員(例如所有OAuth令牌)構建。 –