簡體   English   中英

依賴注入中的工廠模式

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM