2012-01-04 38 views
10

想知道,我們何時應該在模型中的某些方法實際上必須使用privateprotected我們應該什麼時候考慮使用私人還是保護?

有時我不能困擾於將我的方法分組在privateprotected。我只是保持原樣。但是我知道這肯定是一個不好的做法,否則這兩個分組將不會在編程中創建。

謝謝。

回答

15
  • 如果您打算在外部調用一個方法,record.method(),那麼「公共」
  • 如果將僅在內部使用,self.method(),然後選擇「私人」
  • 如果您打算在內部使用它,但也後代,self.method() # in subclass,則「保護」
+2

這聽起來有點不對......你的**第三點**。一個子類可以在內部訪問其超類的'private'方法。一個'protected'方法使你能夠傳入同一個類的對象並在該對象上執行受保護的方法。 – slindsey3000 2012-01-04 19:34:27

+0

http://weblog.jamisbuck.org/2007/2/23/method-visibility-in-ruby「受保護的方法實際上可以在接收者與」自我「相同的類別時被調用」 – clyfe 2012-01-04 20:24:22

0

我不知道紅寶石作爲一種特殊情況,但我認爲答案是一樣的其他語言也一樣,所以這裏是:

的私有方法只能由成員進行訪問同一類,而受保護的類也可用於擴展聲明方法的基類的成員。

+0

Yupp,這是一個一般的編程問題。我已經讀過'私人'和'保護'做了什麼,但是什麼時候我們不能忽視它呢? – Victor 2012-01-04 16:44:04

+0

你的意思是說,一種方法沒有被宣佈爲公共的,私人的或者被保護的呢? – fkerber 2012-01-04 16:47:14

+0

@Victor你不'忽略'封裝,但一般來說保持私人',除非有充分的理由,他們被'保護'或'公共' – 2012-01-04 16:49:19

2

我給我意見,也許我會得到它踢的,但我不費心保護或紅寶石私人。事實上,Ruby對待你像一個成年人,如果你想從課外運行私人方法,你可以(有areways)。您可以在課堂外運行受保護的方法。你甚至可以重新分配常量......基本上,你可以做任何你喜歡的事情。

這就是爲什麼我喜歡它,這是你的責任。我的感覺是,以紀念的東西作爲保護或私有你正在做兩件事情:

  1. 指示你不覺得消費者會需要它。
  2. 第二次猜測別人需要什麼。

,此外,你這就更難測試,因爲它可以是一個真正的痛苦測試私有方法(請What's the best way to unit test protected & private methods in Ruby?對周圍的方式)

對於那些過去的兩個原因,我不不要打擾他們。如果你真的想在你的類/方法和消費者(不管他們是代碼還是開發者)之間存在某種障礙,那麼還有其他更有效的方法(代理,混淆,加密,密碼保護方法等)。否則,爲什麼不給他們訪問你使用的相同工具?

+1

+1我有類似的想法。爲什麼** I **使用它的唯一原因是:rdoc具有「--visibility」選項。隨着公共,受保護和私人,我可以生成不同版本的文檔,或多或少的細節。 – knut 2012-01-04 20:39:58

+0

@knut這是一個有趣的想法,我必須牢記這一點。我傾向於使用yardoc,它有'@ private'標籤,但我從來沒有看到它有什麼用處。謝謝。 – iain 2012-01-05 23:01:14

相關問題