我習慣於使用封裝,無論如何,我的所有變量都是私有的。
但是,當我處理成千上萬的實例的數千種性質的,我開始思考優化,如果封裝的好處,證明性能損失(如果有的話)封裝是否需要比公共變量更多的處理
我所知道的爲什麼要使用封裝疑惑但我問的是:封裝是否值得處理它需要的處理,如果它不需要使用?它使用多少?
我習慣於使用封裝,無論如何,我的所有變量都是私有的。
但是,當我處理成千上萬的實例的數千種性質的,我開始思考優化,如果封裝的好處,證明性能損失(如果有的話)封裝是否需要比公共變量更多的處理
我所知道的爲什麼要使用封裝疑惑但我問的是:封裝是否值得處理它需要的處理,如果它不需要使用?它使用多少?
我想你錯過了封裝點。封裝的關鍵在於該對象控制與其字段的所有交互。從而統一執行業務邏輯並保護系統狀態。鑑於您將不得不運行業務邏輯......您只需使用數據對象就不會保存任何內容。
這就是我上面提到的,我提到我可能並不總是需要封裝,所以我應該使用它,否則它會浪費處理?它使用多少處理?明白了我的觀點? – AndrewxXx
@AndrewxXx如果你不需要封裝,那麼你有一個貧血的系統,並可能在危險和不可測試的方式混合邏輯 – Mgetz
@AndrewxXx閱讀大衛的評論。除非你認爲這是一個問題,否則你甚至不應該在意。 – Borgleader
你的第一選擇應該是封裝的東西。大多數情況下,setter和getter函數應該被內聯。
所有你「失去」的是在實際驗證中涉及的任何額外邏輯所花費的時間,你並沒有設置一個無效值等等。但是你不想爲了速度而錯過它, 你會?
所以,如果選擇是寫
if (x >= 0) obj.x = x;
或 obj.setx(X); //其中setx檢查x> = 0。
哪個更好?
如果有系統的性能標準,那麼基準。如果你符合標準,那很好。如果沒有,找出瓶頸在哪裏。但除非你的setter和getter函數是「正常」的函數(也就是說,只是在檢查後存儲這個值),否則它不應該是瓶頸。典型的瓶頸是「算法選擇差」。
只有當您絕對需要時才進行微型優化。除非您真的能夠看到並且能夠評估需要解決的性能問題,否則更喜歡更靈活和易於支持的代碼。 – David
**在當今的計算能力時代,封裝不會爲您帶來任何處理能力,無論如何。**無論如何,我的意思是說您不會失去足夠的注意力。在你和你的數據訪問(編譯器,虛擬機,操作系統......)之間有很多優化級別,任何OS多任務打嗝都比你的封裝更明顯。 –