1

私は既存のコードを見直しており、「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}
}

2つの理由から、Modelクラスにユーティリティクラス/ハンドラーなどを注入するのは完全に間違っていると思います.1)これによりシリアル化が妨げられます2)なぜですか?モデル クラスには動作があってはなりません。

同意しますか?(このように書かれたクラスを変更する必要がありますか?)

4

3 に答える 3

3

代わりに、DTO インスタンスで動作し、依存関係が注入された新しいサービスを作成できます。そうすれば、DTO から動作を取得し、すべてが再びクリーンになります。建築適合性が良い。

于 2013-03-01T12:42:06.410 に答える
2

DTOにサービスを注入することはおそらく最善のアイデアではありません:)

私が考えるのは、サービスをパラメーターとして受け取る拡張メソッドを使用することです。

このようにして、「動作」はDTOから分離され、シリアル化は問題になりません。

于 2013-03-01T12:40:48.267 に答える
0

拡張メソッドが進むべき道かもしれませんが、これは、ロジックをコンパイル時のシングルトンにするようなものだと思います。これは、変更されない場合は問題ありません。

したがって、文字通りすべてが契約ベースで注入可能であるため、このようなことを試してみます

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);
    }
}
于 2013-03-01T12:51:21.097 に答える