依赖注入——我应该注入“实用程序类”吗?
本文关键字:注入 实用程序类 实用程序 我应该 依赖 | 更新日期: 2023-09-27 18:01:48
我正在审查一个现有的代码,并且有一个"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类/处理程序或其他任何东西是完全错误的,原因有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);
}
}