2010-04-16 36 views
3

實施例:班級數據是內部傳遞還是直接訪問更好?

// access fields directly 
private void doThis() 
{ 
    return doSomeWork(this.data); 
} 

// receive data as an argument 
private void doThis(data) 
{ 
    return doSomeWork(data); 
} 

而第二個選項避免這種耦合的第一個選項被耦合到在this.data值。我覺得第二個選擇總是更好。它促進了課堂內部的鬆散耦合。無所不在地訪問全局類數據似乎是一個糟糕的主意。很顯然,這個類的數據需要在某個時候直接訪問。但是,如果對這個全局類數據的訪問可以通過參數傳遞來消除,似乎總是可取的。

第二個例子的優點是可以處理任何正確類型的數據,而第一個例子只能使用正確的類數據。即使您不需要額外的靈活性,將它作爲選項似乎也不錯。

我只是沒有看到任何直接從私有方法訪問成員數據的優勢,如第一個例子。這裏最好的做法是什麼?我已經引用完整的代碼,但無法找到關於此特定問題的任何內容。

回答

3
  • 如果數據是對象狀態的一部分,private/protected就好了。選項1 - 很好。

  • 我注意到一些開發人員喜歡創建私有/保護變量只是爲了在類中的方法之間傳遞參數,以便他們必須在方法調用中傳遞它們。它們並不是真的存儲對象的模型/狀態。 ...然後,選項1 - 不好。

爲什麼選項1在這種情況下不好......

  • 只露出儘可能多的,因爲你需要(VAR作用域)。所以,傳入數據。不要創建一個私有/受保護的變量只是爲了在兩個方法之間傳遞數據。
  • 內部計算出所有內容的私有方法使其非常容易理解。保持這種方式,除非它是不可避免的。
  • 私有/受保護的變量使得重構變得更加困難,因爲您的方法不是「自我包含」,它取決於可能在別處使用的外部變量。

我的2美分! :-)

2

在課堂上全球數據不是問題恕我直言。類用於耦合狀態,行爲和身份。所以這樣的耦合不是問題。這個觀點表明,你可以用來自其他對象,甚至其他類的數據調用該方法,我認爲這應該比類內耦合更重要。

1

它們都是實例方法,因此#1更有意義,除非您有涉及線程的情況(但取決於語言和方案,即使這樣您可以簡單地將數據方法鎖定/標記爲同步化 - 我的Java知識是生鏽)。

第二種技術更讓人想起程序編程。

相關問題