我有一个WCF服务,并刚刚为业务对象创建了一个DTO。数据传输对象 - 在DTO中执行映射还是在业务对象中执行映射?
我的问题是在哪里把两者之间的映射?
A)在DTO中?
public class PersonDTO
{
[DataMember] public string Id { get; set; }
[DataMember] public string Name { get; set; }
public void CloneFrom(Person p)
{
Id = p.Id;
Name = p.Name;
}
public void Populate(Person p)
{
p.Id = Id;
p.Name = Name;
}
}
或
B)在业务对象?
public class Person
{
public string Id { get; set; }
public string Name { get; set; }
public void CloneFrom(PersonDTO dto)
{
Id = dto.Id;
Name = dto.Name;
}
public PersonDTO GetDTO()
{
return new PersonDTO()
{
Id = Id;
Name = Name;
}
}
}
我喜欢的涉及在分离(业务对象没有DTO的知识),但我更喜欢B的封装(无需公开业务对象胆量DTO)。
只是想知道是否有一个标准的方式?
真的吗?如果我打算公开我的业务对象以允许第三类进行映射,那么我最好在DTO中做这件事。创建另一个类似乎对我来说太过于矫枉过正。不过,我会看看automapper,谢谢。 – GazTheDestroyer 2012-04-24 14:12:53
@GazTheDestroyer:DTO的意思是数据传输不转换。 DTO并不知道它的用法,即:映射。它传输数据,消费者可以使用这些数据实现任何目的,例如:将其映射到ViewModel。您可以自由地将映射添加到DTO,但在我的愚见中,这意味着尽管您错过了DTO的预期目的,因此您的DTO不再是DTO。在我们当前的项目中,存储库会生成实体BL接收实体,将它们映射到DTO。 UI层查询BL,获取DTO并将它们映射到ViewModels(根据需要)。 – Nope 2012-04-27 22:33:50