2012-01-11 15 views
2

假設我有一個類,並且每當我設置了某些屬性blafoo(可以在外部和內部設置)我想調用該類的另一種方法,我們將其稱爲onChangeFunction()在OOP中使用設置器的最佳方式

當直接設置內部值時,簡單地調用onChangeFunction()是否是一種好方法。

function someFunction() 
    // Some Calculations here ... 
    this.bla = some_value; 
    this.onChangeFunction() 
end 

,或者它會更好地只能通過使用內部setter的方法,因爲存在一定的動作觸發與它,因此這將是一個更清楚地佈置代碼還設置這些變量blafoo

我甚至更進一步:假設我不需要一個可以從外部調用的外部調用器(訪問類型= public),是否可以發明一個private調試器來做同樣的方法並且僅僅因爲觸發的設置動作而使用setter? 編輯:我的意思是以下內容:即使我不會有一個公共setter(因爲不應該有公共訪問權限來設置變量,因爲它只是一個內部變量),它會是一件好事嗎?那只是因爲觸發行動的事情而造成的private

在此先感謝!

回答

1

我認爲從長遠來看,總是使用setter,並且從setter中調用onChangeFunction()的錯誤更少。

您沒有指定您想要的編程語言,但有些語言允許您定義一個看起來像數據成員的「屬性」,但在嘗試更改它時總是調用一個函數。例如,請參閱Python中的property et al

至於你的第二個問題,我不認爲有一個private二傳手是有什麼問題。

+0

感謝您的快速回復。是的,我認爲它不太容易出錯,我只是想知道,通過使用來自內部例程的setter而不是直接訪問這些值是不是過於複雜。我目前想的語言是MATLAB,但這是一個普遍的問題。但是,謝謝你的提示,不知道這樣的事情存在。對於我的第二個問題:好吧,我只是想知道這是否是普遍的做法,因爲到現在爲止,我認爲'getters-setters'是一個概念,可以讓一些私人變量在'外部'訪問。 – tim 2012-01-11 08:33:29

+1

@ColHeather:我們正在討論有兩行代碼,並在每個調用站點用兩行代碼替換。說實話,我不會稱之爲「過於複雜」。 – NPE 2012-01-11 08:36:03

+0

@ColHeather:我已經更新瞭解決編輯問題的答案。但是,知道這可能需要幾分鐘時間才能看到我所做的更改。簡而言之:在我看來,擁有「私人」設置者沒有任何問題。 – NPE 2012-01-11 08:36:43