Объекты передачи данных -выполнять сопоставление в 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;
    }
}

или

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;
        }
    }
}

Мне нравится разделение ответственности в A (Бизнес-объект не знает о DTO ), но я предпочитаю инкапсуляцию B (нет необходимости подвергать внутренности бизнес-объекта DTO ).

Просто интересно, есть ли стандартный способ?

6
задан GazTheDestroyer 24 April 2012 в 14:10
поделиться