2011-04-09 27 views
6

我有一個關於php前端控制器實現的「概念」問題。沒有singleton的PHP前端控制器實現:概念性問題

我所見過的大部分前端控制器都是用Singleton實現的,我不是單身模式的忠實粉絲,我創建了一個具有靜態屬性的容器,它將存儲前端控制器的一個單一實例。

隨着單身,我不得不把初始化代碼構造(或由構造調用方法)內:與容器

$fc = FrontController::getInstance(); 

我可以把配置FrontController設計之外,這是我的目標,我仍然有一個簡單的方法來檢索FrontController。

$fc = Container->getFrontController(); 

此代碼看起來更清潔,我可以得到乾淨的子類而不關心父構造函數。

這在'bootstrap'時候是完全一樣的,但實際上與我以前的實現不同的是,現在我可以在應用程序中的任何位置(在DAO內部或Action內部)創建FrontController,因爲構造器是no更長的私人/保護。

我的問題是: 它是一個「壞習慣」,送給我的課的用戶在該應用的任何創造FrontController實例的可能性?我會寫文檔,並提供其他類的容器,但我仍然想知道我是否應該防止奇怪的用途。

回答

2

是否有任何真正的理由在應用程序內創建FrontController實例?如果有,然後繼續。否則我對此有點懷疑,因爲它可能會使事情複雜化。我擔心的是有人使用新的FrontController實例時,有一種更簡單的方式,無論是懶惰還是因爲他們不知道更好。一旦他們發現有效的方法,即使有更好的方法,一些人也會繼續這樣做。永遠不要忘記,你可能需要和那些不如你一樣好的人一起工作。

就我個人而言,我會隱藏這個或不完全允許它。不過,我會在後續版本中牢記這一點。如果你偶然發現一個最好的選擇,那就把它添加到你的「官方」界面。

不要忘記,一旦你釋放函數到野外,這是很困難的,把它扼殺掉。

+0

感謝您分享您的想法,現在我意識到frontcontroller可能是幾個項目應該是唯一的一個。即使我將前端控制器作爲單例實現,我仍然可以編寫getFrontController()方法:)我只是希望它在測試過程中不會造成麻煩。 – fatmatto 2011-04-10 00:24:50

2
$fc = Container::getFrontController(); 

聽起來不錯。

我不認爲讓開發人員在任何地方檢索Front Controller實例是不好的做法,如果您正確控制開發人員可以用它做什麼(例如,不要覆蓋某些屬性或在錯誤中執行其方法順序沒有向用戶顯示錯誤/警告)。

+0

我只是要了解哪些問題會導致多個實例,謝謝:) – fatmatto 2011-04-10 00:27:18