2013-08-02 49 views
-1

我習慣於使用封裝,無論如何,我的所有變量都是私有的。
但是,當我處理成千上萬的實例的數千種性質的,我開始思考優化,如果封裝的好處,證明性能損失(如果有的話)封裝是否需要比公共變量更多的處理

我所知道的爲什麼要使用封裝疑惑但我問的是:封裝是否值得處理它需要的處理,如果它不需要使用?它使用多少?

+8

只有當您絕對需要時才進行微型優化。除非您真的能夠看到並且能夠評估需要解決的性能問題,否則更喜歡更靈活和易於支持的代碼。 – David

+0

**在當今的計算能力時代,封裝不會爲您帶來任何處理能力,無論如何。**無論如何,我的意思是說您不會失去足夠的注意力。在你和你的數據訪問(編譯器,虛擬機,操作系統......)之間有很多優化級別,任何OS多任務打嗝都比你的封裝更明顯。 –

回答

4

我想你錯過了封裝點。封裝的關鍵在於該對象控制與其字段的所有交互。從而統一執行業務邏輯並保護系統狀態。鑑於您將不得不運行業務邏輯......您只需使用數據對象就不會保存任何內容。

+0

這就是我上面提到的,我提到我可能並不總是需要封裝,所以我應該使用它,否則它會浪費處理?它使用多少處理?明白了我的觀點? – AndrewxXx

+0

@AndrewxXx如果你不需要封裝,那麼你有一個貧血的系統,並可能在危險和不可測試的方式混合邏輯 – Mgetz

+2

@AndrewxXx閱讀大衛的評論。除非你認爲這是一個問題,否則你甚至不應該在意。 – Borgleader

1

你的第一選擇應該是封裝的東西。大多數情況下,setter和getter函數應該被內聯。

所有你「失去」的是在實際驗證中涉及的任何額外邏輯所花費的時間,你並沒有設置一個無效值等等。但是你不想爲了速度而錯過它, 你會?

所以,如果選擇是寫

if (x >= 0) obj.x = x; 

或 obj.setx(X); //其中setx檢查x> = 0。

哪個更好?

如果有系統的性能標準,那麼基準。如果你符合標準,那很好。如果沒有,找出瓶頸在哪裏。但除非你的setter和getter函數是「正常」的函數(也就是說,只是在檢查後存儲這個值),否則它不應該是瓶頸。典型的瓶頸是「算法選擇差」。

相關問題