想象一下,在一個類中有幾種方法,它們都使用相同的字段,例如studentNumber
。每次需要的時候獲取這個字段的值(從任何可用的方法獲取並且不是超慢的)是更好的,還是將其定義爲私有並初始化一次?何時定義類中的私有字段
後者明顯更好地考慮性能。但是,我的主管一直堅持認爲,我們應該嘗試以一種獨立於該方法以外的世界的方式編寫方法。
任何幫助?
想象一下,在一個類中有幾種方法,它們都使用相同的字段,例如studentNumber
。每次需要的時候獲取這個字段的值(從任何可用的方法獲取並且不是超慢的)是更好的,還是將其定義爲私有並初始化一次?何時定義類中的私有字段
後者明顯更好地考慮性能。但是,我的主管一直堅持認爲,我們應該嘗試以一種獨立於該方法以外的世界的方式編寫方法。
任何幫助?
第二種方法存在問題。你的方法相互依賴,因爲它們每個都可以改變共享資源(一個字段)。這就是所謂的共同耦合(來自維基):
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
並在類構造函數中爲其設置值,那麼我認爲您的主管會同意這樣做。
將可變「狀態」添加到使用成員變量的類中可能會使測試變得更加困難,並且難以用於多線程。如果可能,一般應該避免。
如果外部存儲的值永遠不會預計將在對象的一生的時間來改變,一旦獲取其價值和存儲這並不意味着可變的狀態,所以你從上面的問題,是安全的。
另一方面,當前的設計意味着代碼與提供您使用的值之間的緊密耦合。這是一種代碼味道。也許一個更好的設計會轉移你的類的外部獲取值的責任,並且你會添加一個構造函數參數來接受它,本着依賴注入的精神。