簡體   English   中英

依賴注入-我應該注入“實用程序類”

[英]Dependency injection - Should I inject “utility classes”

我正在查看現有代碼,並且有一個“ bean”類:

[Serializable]
public class MyData {
 string S {get;set;}
 int I {get;set;}
 //bla bla bla
 private IStringConverter sc;
 public MyData(IStringConverter sc){this.sc=sc}
}

我認為注入Utility類/處理程序或Model類中的任何東西完全是錯誤的,原因有2個:1)這樣可以防止序列化2)為什么? 模型類不應具有行為。

你同意嗎? (我應該更改這樣編寫的類嗎?)

您可以改為創建一個在DTO實例上運行並注入了其依賴項的新服務。 這樣一來,您就可以擺脫DTO的影響,一切再次變得干凈。 良好的建築適應性。

將服務注入DTO可能不是最好的主意:)

我會考慮使用將服務作為參數的擴展方法。

這樣,“行為”就與DTO分離了,而序列化也不成問題。

擴展方法可能是可行的方法,但是我認為這有點像使邏輯成為編譯時單例,如果它永遠不會改變,那很好。

所以我會嘗試這樣的事情,因為從字面上看,所有內容都是基於合同的且可注入的

public class Poco
{
    public int Foo;
    public int Bar;
}

public class PocoUtility : IPocoUtility
{
    private IService _service; 
    public PocoUtility(IService service)
    {   
        _service = service;
    }

    public Result DoSomethingWithPoco(Poco poco)
    {
        return _service.Convert(poco);
    }
}

public class SomethingThatUsesAPoco
{
    private IPocoUtility _logicForSomething;

    public SomethingThatUsesAPoco(IPocoFactory pocoFactory,  IPocoUtility logicForSomething)
    {
        _poco = pocoFactory.CreateInstance();  
    }

    public Result DoIt()
    {
        return _logicForSomething.DoSomethingWithPoco(_poco);
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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