Mat*_*att 6 dependency-injection anti-patterns interface dto service-locator
考虑下面的代码(已经简化).我有一个服务类,它返回一个特定DTO对象的列表,每个对象都实现自己的特定接口.在实际代码中,当我使用遗留代码时,通过迭代数据集来填充这些代码.
问题:
我们如何创建/使用DTO而不用新增或使用Service Locator反模式?在Composition Root中组合一个空的DTO对象并通过构造函数将它注入Service类没有多大意义,因为我实际上在填充列表时使用DTO作为排序的临时变量.
在代码中,您可以看到我新建DTO的示例.但是,如果我首先让DTO不实现接口,这并没有好多少.那么,他们不应该实现接口,因此不使用DI与DTO?
public class Services : IServices
{
public IList<IDTO> GetDTOs()
{
...
List<IDTO> dtos = new List<IDTO>();
foreach (c in d)
{
DTO dto = new DTO();
dto.x = c.x;
dto.y = c.y;
dto.z = c.z;
dtos.Add(dto);
}
return dtos;
}
}
Run Code Online (Sandbox Code Playgroud)
我认为DTO不应该实现接口,因为它们不太可能实现会改变的行为.
他们也不应该注射.并非所有对象都应该是.我认为这是对new的适当调用:创建对象,使用它,让它超出范围并进行GC.
| 归档时间: |
|
| 查看次数: |
3136 次 |
| 最近记录: |