【发布时间】:2011-09-11 22:39:10
【问题描述】:
考虑下面的代码(已被简化)。我有一个服务类,它返回一个特定 DTO 对象的列表,每个对象都实现自己的特定接口。在实际代码中,当我使用遗留代码时,这些是通过迭代数据集来填充的。
问题:
我们如何创建/使用 DTO 而无需更新它们或使用服务定位器反模式?在 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;
}
}
【问题讨论】:
标签: interface dependency-injection dto anti-patterns service-locator