效益

2015-12-22 54 views
1

我碰到這一段代碼來直?因此,成爲服務本身的消費者,而不是工廠。這個額外的間接層是如何實現的?效益

據我所知,如果ISomeService的創建需要更復雜的邏輯,container.Resolve無法實現,那麼肯定會需要一個工廠。

回答

1

好問題。沒有上下文信息,就很難捍衛這種退化的抽象工廠。

有時,其原因可能在於編寫該工廠的用戶的程序員知道必須重新爲每次使用創建ISomeService實現;也許這個特定的實現不是線程安全的。

此外,ISomeService可能從IDisposable獲得,也許客戶的確是這樣的:

using (var svc = this.factory.GetSomeService()) 
{ 
    // use svc here... 
} 

這將導致svc要妥善處置後使用。

以上所有內容都是抽象漏洞,但通用。

處理此類生命週期和資源管理問題的更好方法是通過DecoraptorRegister Resolve Release pattern

然而,這仍然可能會要求您有一個類似SomeServiceFactory,但然後it'd be an infrastructure component,例如支持Decoraptor。


但請注意,這個特定的抽象工廠是退化的,因爲它沒有方法參數。另一方面,具有一個或多個方法參數的抽象工廠是common solution to the problem of creating a polymorphic service based on a run-time value