나는 WCF 서비스를 가지고 있으며 방금 비즈니스 개체에 대한 DTO를 만들었습니다.데이터 전송 객체 - DTO 또는 비즈니스 객체에서 매핑합니까?
제 질문은 두 가지 사이의 매핑을 어디에 두어야합니까?
가) 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들에 대한 지식이없는 비즈니스 오브젝트) A의 우려의 분리를 좋아하지만 B의 캡슐화 (DTO에 비즈니스 오브젝트 용기를 노출 할 필요가 없습니다)를 선호한다.
표준 방법이 있는지 궁금한가요?
정말요? 세 번째 클래스가 매핑을 수행 할 수 있도록 내 비즈니스 객체를 노출하려면 DTO에서 수행해야합니다. 아직 또 다른 클래스를 만드는 것은 나에게 너무 잔인한 것처럼 보인다. 그래도 automapper 살펴 보겠습니다, 감사합니다. – GazTheDestroyer
@GazTheDestroyer : DTO는 데이터 전송이 변환되지 않음을 의미합니다. DTO는 그 사용법, 즉 매핑을 인식하지 못한다. 그것은 데이터를 전송합니다. 예를 들어 ViewModel에 맵핑하는 것은 이제까지 목적을 위해 데이터를 사용하는 것은 소비자의 몫입니다. 당신은 DTO에 매핑을 추가 할 수는 있지만 저의 겸손한 견해로는 DTO의 의도 된 목적을 그리워하여 DTO가 더 이상 DTO가 아니기 때문에 의미가 있습니다. 현재 프로젝트에서 저장소는 엔티티를 생성합니다. BL은 엔터티를 받고 DTO에 매핑합니다. UI 레이어는 BL을 쿼리하고 DTO를 가져 와서 ViewModels에 매핑합니다 (필요한 경우). – Nope