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}
}

我认为在模型类中注入实用程序类/处理程序或其他任何东西是完全错误的,原因有两个: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 回答