我正在审查现有代码,并且有一个“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}
}
我认为在Model类中注入Utility类/处理程序或其他内容是完全错误的,原因有二: 1)这可以防止序列化 2)为什么?模型类不应该有行为。
你同意吗? (我应该改变这样写的课吗?)答案 0 :(得分:3)
您可以改为创建一个在DTO实例上运行且注入了依赖关系的新服务。这样你就可以从DTO中获得行为,而且一切都很干净。良好的建筑设计。
答案 1 :(得分:2)
将服务注入DTO可能不是最好的主意:)
我会考虑使用将服务作为参数的扩展方法。
通过这种方式,“行为”与DTO分离,序列化不是问题。
答案 2 :(得分: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);
}
}