我有一個使用Unity進行依賴注入的MVC3項目。試圖提高MVC3 + Unity項目的效率
有一個主要的MVC3項目,位於MVC3和數據層之間的「域」類庫,以及構成數據層的一堆類庫。
(MVC3) - (域) - (數據層)
這是在域類的服務的構造的一個示例:一個控制器被稱爲具有
public DomainModelCacheServices(
Data.Interface.ICountryRepository countryRepository,
Data.Interface.ILanguageRepository languageRepository,
Data.Interface.ISocialNetRepository socialNetRepository
)
每次DomainModelCacheServices在其構造函數中構造一個新的DomainModelCacheServices對象,並在DomainModelCacheServices的構造函數中加上三個存儲庫類。
我不敢相信這是高效!
更糟的是,類DomainModelCacheServices是一個緩存類。它加載永不改變的數據列表,並將它們保存爲靜態數據。但它仍然需要爲每個參考構建三個存儲庫類。
如果我給DomainModelCacheServices一個singleton的生命週期(永遠),我必須確保它是線程安全的,如果有一天當我得到數百次命中時,將會有很多鎖定。
我可以在構造函數改成這樣:
public DomainModelCacheServices(
IServiceLocator serviceLocator
)
我不知道爲什麼,但是這看起來不正確。構造函數變得毫無意義,我必須在領域類中引用Unity,並以某種方式使領域類知道MVC3應用程序擁有的ServiceLocator。也許鬆耦合可能太鬆?
也許構建所有這些類並不像看起來那麼低效,我不應該擔心它?
如果Unity支持「Lazy」構造函數參數,那會更好。但事實並非如此。
那麼,關於如何使MVC3 + Unity項目更高效,特別是在領域模型設計中的任何想法?
感謝您的閱讀!
「如果我給DomainModelCacheServices一個單身人士的生命期(永遠),我必須確保它是線程安全的」如果它是靜態的,你不必這麼做,或者我錯過了某些東西? – Glenn 2012-02-21 11:37:16
@格倫:這些字段是靜態的,而不是類本身。 – jgauffin 2012-02-21 11:49:55
你首先使用的是DomainModelCacheServices?有了這樣的通用名稱和那些構造函數參數,我懷疑它一次試圖做太多事情。 – guillaume31 2012-02-21 13:05:51