2014-04-17 28 views
0

我想知道是否有任何最佳實踐或規則可以幫助確定是否允許從對象根目錄進行深度導航。到目前爲止,我幾乎總是傾向於隱藏所有的實現細節,但它可能是矯枉過正的。何時允許深層對象導航以及何時避開它?

通過深層導航,我的意思是類似於httpResponse.status().text()而不是httpResponse.statusText()考慮到HttpResponse封裝了HttpStatus對象。

後者完全隱藏實現細節,但也需要更多的代碼。我知道這個例子可能過於簡單,並且除了阻止null狀態之外,沒有不變式可以強制執行,但它足以揭示問題。

請注意,我們可以認爲HttpStatus是不可變的例子。

它可能不是最好的例子,但我們也可以使用任何組合用於繼承的例子。

+0

我的第一個問題就是,爲什麼你會想要這樣做? – mituw16

+0

@ mituw16,做什麼?整個http事物只是一個構圖的例子。 – plalx

+0

我明白,我不明白爲什麼會在示例中想要允許或不允許對象導航。在我看來,編寫任何對象的最佳方式是以合理和高效的方式對它們進行編碼。想想這樣,通過輸入'httpResponse.StatusText()'與'httpResponse.status()。text()'來獲得什麼好處呢?在這種情況下,我個人認爲這將會是過分的,因爲你將不得不編寫更多的代碼來隱藏'.text()'方法。但是,這只是我的意見 – mituw16

回答

0

Clean Code,我們可以讀到:

目標隱藏背後的抽象的數據和公開該 對數據進行操作的功能。數據結構公開他們的數據並且沒有有意義的功能。

我認爲這真的很好地回答了我的問題。在上面的例子中,我們可以安全地假設httpResponse是一個數據結構,所以沒有理由隱藏它的結構細節。但是,如果它是具有行爲的對象,那麼遵循Tell Don't Ask原則通常會更合適。

相關問題