2013-07-09 16 views
0

想象一下,在一個類中有幾種方法,它們都使用相同的字段,例如studentNumber。每次需要的時候獲取這個字段的值(從任何可用的方法獲取並且不是超慢的)是更好的,還是將其定義爲私有並初始化一次?何時定義類中的私有字段

後者明顯更好地考慮性能。但是,我的主管一直堅持認爲,我們應該嘗試以一種獨立於該方法以外的世界的方式編寫方法。

任何幫助?

回答

1

第二種方法存在問題。你的方法相互依賴,因爲它們每個都可以改變共享資源(一個字段)。這就是所謂的共同耦合(來自維基):

Common coupling (also known as Global coupling) is when two modules share 
the same global data (e.g., a global variable). 
Changing the shared resource implies changing all the modules using it. 

這就是爲什麼我更喜歡第一種方法。

但是,如果您可以將您的字段標記爲readonly並在類構造函數中爲其設置值,那麼我認爲您的主管會同意這樣做。

1

將可變「狀態」添加到使用成員變量的類中可能會使測試變得更加困難,並且難以用於多線程。如果可能,一般應該避免。

如果外部存儲的值永遠不會預計將在對象的一生的時間來改變,一旦獲取其價值和存儲這並不意味着可變的狀態,所以你從上面的問題,是安全的。

另一方面,當前的設計意味着代碼與提供您使用的值之間的緊密耦合。這是一種代碼味道。也許一個更好的設計會轉移你的類的外部獲取值的責任,並且你會添加一個構造函數參數來接受它,本着依賴注入的精神。