2011-05-01 66 views

回答

1

如果您在談論RequestResponse對象,幾天前在Symfony開發人員郵件列表上討論了這個問題。我邀請你看看它here

爲什麼不吸氣?不確定是否有明確的答案,但我認爲這主要是基於個人口味的決定。

它破壞封裝嗎?對於這個特殊情況,我不認爲。我的推理是,現在,對於現在公開的各種對象沒有執行特殊的邏輯。所以最後,你最終會通過一個getter來獲取對象,並直接讀取或修改它。使用公共屬性檢索對象沒有多大區別。

// With Getters 
$parameterBag = $request->getQuery(); 
$parameterBag->get('key'); 

// With Public Properties 
$parameterBag = $request->query; 
$parameterBag->get('key'); 

當您需要確定某個屬性具有特定的值或格式時,應執行封裝。例如,假設你有一個具有成本屬性的類,並且此屬性不應該爲負數。因此,如果成本屬性是公開的,可以通過執行類似$receipt->cost = -1;的設置將其設置爲負值。然而,如果你把它設置爲私有的,並且類的用戶只能通過setter來設置它,那麼你可以通過在setter代碼中做一些特殊的驗證來確保成本從不低於0。

在我們的例子中,我們正在談論一個集合對象,一個ParameterBag對象是精確的。我不認爲這個對象有特殊的要求,但我可能是錯的。所以對我而言,通過公共財產訪問這些屬性是正確的。

我可以看到贊成getters的主要參數是它會更符合使用getter的框架的其他部分。但是,獲得者可以與公共財產共存。總之,我認爲這種情況是安全的。公共財產只能在特殊情況下使用,這種情況似乎是有益的,而且這樣做是正確的。

+0

感謝您在symfony-devs中鏈接主題。我通常閱讀這個組,但沒有注意到這個話題。 – Koc 2011-05-03 09:13:41

+0

是的,我注意到你在這個symfony-devs論壇上很活躍,這就是爲什麼我建議你這個鏈接:)你是對的事實,我可以設置一個屬性爲null,所以也許這將是一個好主意通過僅爲屬性提供setter和getter來強制封裝。 – Matt 2011-05-03 14:43:54

0

你的意思是Request的對象?或者你在想什麼?

如果您擔心安全問題,那麼請查看Security組件,使用測試驅動開發,使用測試過的庫(不要發明自己的認證,密碼學和相關解決方案)並進行代碼評審。

0

封裝已封裝的內容有什麼意義?我的意思是 - 這些屬性中的每一個都是一個帶封裝的parameterBag實例。

相關問題