Gaz*_*yer 6 c# wcf data-transfer-objects dto
我有一个WCF服务,刚刚为业务对象创建了一个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;
}
}
Run Code Online (Sandbox Code Playgroud)
要么
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;
}
}
}
Run Code Online (Sandbox Code Playgroud)
我喜欢A中关注点的分离(业务对象不知道DTO),但我更喜欢B的封装(不需要将业务对象暴露给DTO).
只是想知道是否有标准方式?
Dir*_*eek 11
我认为这需要一个单独的课程,因为BO和DTO都不应该关注他们转变为另一个课程.
我个人使用automapper库进行对象转换.通过简单的转换,例如在您的示例中,映射在一行代码中完成,复杂的转换也很容易设置.
如果您想自己映射,您仍然可以使用扩展方法来保持映射实现与DTO和BO类分离.