문제

매우 흥미로운 토론이있었습니다 Automapper에 관한 Lostechies (2 방향 맵핑에 대한 논쟁).

이것은 실제로 내가 현재 진행중인 문제로 인해 관심을 끌었습니다. 배송 제품을 사용하여 사용자에게 요금/배송 시간과 같은 정보를 제공합니다. 실제 서비스를 중앙 집중화하기 위해 도메인 엔티티를 지속하는 WCF 웹 서비스가 있습니다.

도메인 모델을 단순화하려면 기본적으로 2 개의 클래스가 있습니다.

public class Shipment
{
 public IList<Item> Items{get;set;}
}

public class Item
{
 //some primitive properties
}

또한 와이어를 가로 질러 하중을 밝게하기 위해 생성 된 해당 DTO 세트가 있습니다. 프레젠테이션 조각 (또는 웹 서비스에 닿는 부분)은 도메인 모델에 대한 지식없이 DTO를 사용합니다.

내 질문이 여기에 온다. 배송을 만들려면 서비스가 항목 목록을 수락합니다. 배송에 대한 논리가 있으며, 이는 웹 서비스 뒤에 숨겨져 있습니다. 본질적으로 이것은 항목이 와이어 (클라이언트 -> 서버)를 가로 질러 전달되면 배송이 생성되고 배송이 전달되면 (서버 -> 클라이언트)가 전달됩니다. 이제 ShipmentDto에는 itemdto의 자식 목록도있어 2 방향 맵핑 시나리오가 생성됩니다.

이것은 간단한 CRUD 작업 이상의 것이며 저는 명령 메시지 패턴에 훨씬 익숙하지 않으므로 커뮤니티 가이 문제를 해결하는 방법이 궁금합니다.

2 방향 맵핑으로 두 가지 방법을 모두 전달합니까?

샘플 사용법 (프리젠 테이션 계층) :

List<ItemDTO> list = new List<ItemDTO>();
//add items to list


ShipmentServiceClient client = new ShipmentServiceClient();
List<ShipmentDTO> shipments = client.GetShipments(list);

//shipments are now displayed to the user
//with respective costs and other useful data
도움이 되었습니까?

해결책

그 게시물에서 내가 이해하지 못한 것은 반응의 문구였습니다. "들어오는 DTO는 명령 메시지에 매핑됩니다." DTOS는 양방향이 될 수 있지만, 매핑 (automapper)은 제공되지만 단방향입니다.

다른 팁

귀하의 질문의 요점을 놓칠 위험이 있으면, 잘못된 이유 때문에 DTO를 재사용하지 않는 한 DTO를 양방향으로 사용해도 괜찮습니다. 귀하의 경우, 서버에 각 ItemDTO를 완전히 채우는 많은 항목에 대한 배송을 작성하라는 요청이 서버가 다시 돌아 오면 ItemDTOS가 기본적으로 동일합니까? 또는 실제로 여러 품목을 배송하도록 요청하고 있지만, 돌아 오는 항목에는 서버가 작성한 추가 세부 정보 (예 : 항목 당 배송 비용, 재고 상태 등)가 있습니까? 후자의 경우, 배송 요청이있는 특정 품목과 품목에 대한 배송 세부 사항을 모두 나타내도록 항목을 재사용해서는 안된다고 말합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top