2012-02-22 123 views
0

至於我可以看到有如何處理像根模型對象應用程序範圍的角色球員的對象(MVC中的上下文中)兩個主要原則:傳遞對象與辛格爾頓

  1. 創建對象和傳遞對象樹(例如,在構造函數)
  2. 將它作爲一個單身或其他全局變量技術

第一種方法似乎是更清潔,因爲依賴是更好可見,但有很多的額外的工作要做(參數,類變量LES,...)。

你更喜歡什麼?

編輯:第一種技術也只使用了一個實例,但它是通過將對象,而不是通過一個靜態函數

+1

這在很大程度上取決於什麼樣的對象是的...這應與單身打交道時要考慮的一個方面是可測試性(使用接口+混凝土) – 2012-02-22 14:27:58

+0

讓我們假設它是所有其他模型對象聚集在一起的應用程序主模型對象。 – Dominik 2012-02-22 14:34:53

+0

嗯......如果你堅持使用MVC/MVP模式,那麼你一定希望將模型傳遞給View組件。除此之外,我沒有現成的答案。如果需要的話,擁有一個非單身模型將允許您隨時進行交換,這是一個相關的思想。 – 2012-02-22 14:43:06

回答

1

我喜歡運行的單身的方法getInstance()作爲構造函數的參數設置 - 烘二鳥一石頭;)

+0

太棒了! Singleton的簡單性不會錯過清晰的界面。非常靈活的方法,謝謝:) – Dominik 2012-02-22 14:49:45

1

我認爲通過參數是一個更有記憶效率,更容易調試,但需要一些額外的工作。

我更喜歡只在我真正需要它的時候使用singleton(比如數據庫會話,寫入文件等)。

這確實取決於項目類型,語言,預算,項目大小等。沒有「通用」答案。

1

這是依賴注入可以幫助你的地方。無論何時創建一個對象,必須手動將所有正確的依賴關係手動傳遞給對象可能會很痛苦,並且可能有點容易出錯。體面的依賴注入容器可以幫助實現這個過程的自動化,實際上比單例更容易使用。

的Symfony2的框架是一個現代的例子:

http://symfony.com/doc/current/book/service_container.html

+0

[Spring](http://www.springsource.org/get-started)是一個比較知名的。 – ArtB 2012-02-22 14:55:02