[英]Factory Pattern In Dependency Injection
我有一堂課,看起來像這樣:
public class SomeRepo : ISomeRepo
{
private IThingFactory _thingFactory;
public class SomeRepo (IThingFactory thingFactory)
{
_thingFactory = thingFactory;
}
public IThing GetThingFromDatabase(int id)
{
string thingName = /* some call that gets back some primitives */
IThing returnVal = _thingFactory.createThing(thingName);
return returnVal;
}
}
簡而言之, SomeRepo
是負責與某些數據存儲進行通信以獲取IThing
by Id的IThing
。 而IThingFactory
是一個簡單的工廠, new IThing
根據字符串屬性返回一個new IThing
。
如果我使用的是Dependency Injection容器,是否仍應依賴IThingFactory
? 為了方便起見,我似乎將兩種設計模式混合在一起。 是否有更優雅的方式來構建IThing
而無需工廠,還是我可以遵循的良好模式?
謝謝
編輯:我正在使用的DI容器是Ninject。
依賴注入是一種實現層之間松散耦合的技術,這與我將其描述為設計模式的方式不完全相同。
混合使用設計模式或使用多種技術作為一般的陳述是沒有錯的,除非您在不需要的地方引入了復雜性。
所以我的建議是,通過質疑需求並理解設計模式的使用來處理事情,然后您將能夠認識到需要使用某種模式來使代碼可維護,可擴展或您要滿足的任何技術要求。
我會問自己的問題:
我要解決的問題是什么?
這種邏輯的擴展性如何? 有哪些運動部件,核心要求是什么?
哪種設計模式可以解決此類問題?
您還需要權衡引入代碼的復雜性和使用某些設計模式所花費的時間,以及在短期和長期使用它的好處之間的權衡?
如果IThink是一個不需要超過數據庫輸出的類(因此,如果它不需要DI容器中的任何內容),並且您不想模擬它進行測試,則恕我直言,您可以通過調用構造函數來創建該類。
否則,工廠模式就是我眼中的正確選擇。
對於NInject,有一個工廠擴展使創建工廠非常容易-您只需創建接口,擴展即可在運行時創建相應的實現。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.