2010-11-16 40 views
13

因此,實例變量與參數傳遞?有爭論嗎?

我一直在努力對最近的一些遺留代碼進行重新分解,並且發現自己質疑我一直在做的一些重新分解決定的有效性。一個這樣的查詢是關於使用實例變量來在對象內的方法之間共享對象。

具體來說,有許多地方構造函數&方法已被分割,本地變量提升爲實例變量,允許從現在分開的方法訪問。對我而言,這似乎是錯誤的。它打破了封裝,改變了範圍並且可能影響生命週期,然而,其中一些類與性能相關,因此我想知道重新分解這些方法使用參數傳遞的含義可能是什麼?

更重要的是,我想知道我的假設是否還能持續用水?在涉及私有方法之間共享時,參數傳遞的對象優於實例變量嗎?

回答

8

在加上網站這種方式你不必將這些參數傳遞給其他方法。當一個方法有三個以上的參數時(根據Robert Martin's Clean Code),代碼的可讀性開始快速下降。我想你應該混合這兩種方法來打賭最好的結果。

你可以做的是看看你是否可以從現有的一部分中提取一個新的類。當只有部分方法使用這些實例字段時,可能這些方法正在做一些可以抽象的事情。通過這種方式,您可以創建一個新的實例字段作爲構造函數參數或屬性並實例化它。

7

我絕對認爲你不應該只是採取局部變量,並使它們的實例變量只是爲了避免在左右傳遞它們。由於你已經列舉的原因,這絕對不是一個好主意,包括它使課堂本身膨脹的事實。

該實例變量代表的是該類的一個屬性,而不是該類的屬性是否可以一般處理。這將取決於該類所代表的實體。 但是,這種設計與課程本身的設計有關,也許它需要被重新考慮的整體課程設計

如果也許你提供你指的是重構的一個例子,它可能有助於在這方面

+0

+1提供一個更好的答案,它確實聽起來像碼味。 – 2010-11-16 11:10:28