2012-03-05 3 views
2

Order를 나타내는 평면 DTO를받는 웹 서비스를 사용하고 있으며, 비즈니스 표현을이 평면 표현으로 변환해야합니다.
dtodto에서 다형성 비즈니스 객체로 변환

비즈니스 개체 : business object


이제 문제는 어떻게 내 Order 엔티티를 변환합니까 여기
는 개체 -
DTO입니까?

  1. Order은 DTO로 자신을 표현하는 방법을 알고 있나요 :
    나는이 개 가능한 솔루션 생각할 수 OrderDTO dto = order.ToDto();
    하지만이 데이터 표현을 아는 사업체의 명백한 단점이있다.

  2. Convertor : OrderDTO dto = Convertor.Convert(order); 일종의 작업을 수행 했습니까?
    그러나 변환기 코드는 다음과 같이해야합니다 :

    경우 (순서는 OnlineOrder입니다)
    {
    dto.Email = ((OnlineOrder) 순서) .Email;
    } 물론 끔찍합니다.

의견이 있으십니까? automapper는 여기에서 도움을 줄 수 있습니까?

답변

1

"변환기"가 본질적으로 가지고있는 공장을 찾고 있습니다. 코드는 다음과 같을 것입니다 :

var factory = new OrderDTOFactory(); 
OrderDTO orderDTO = factory.CreateOrder(order); 

공장 내에서 몇 가지 방법을 제안 할 수 있습니다. Automapper는 여기 유용 할 수 있으며, 귀하의 DTO가 그다지 크지 않더라도, 조건을 만족시키는 것입니다. Automapper는 전송해야하는 많은 속성을 가진 객체에 대해 나에게 가장 유용했습니다.

"변환기"코드가 실제로 그렇게 끔찍하다고 생각하지 않습니다. 매우 확장 성은 없지만 읽기 쉽습니다. 그러나 서브 클래스의 양이 꽤 정적이라면 이것은 실제로 문제가되지 않습니까? 나는 당신의 클래스가 특정한 방법을 가졌는지 또는 더 자세한 세분화되지 않은 것인지 어떻게 알 수 있는지 확신 할 수 없다.

+0

비즈니스 오브젝트의 당신의 세트, 여러분이이처럼, 인터페이스 "IOrder"를 추출 할 수 OrderDTO입니다 DTO, 정확히 하나 개의 클래스에 해당하는 경우 : 는'공공 추상 클래스 주문 IOrder를 구현 {' 모든 선언 계층 구조의 맨 아래에있는 것을 제외하고는 서브 클래스 abstract. 이렇게하면 누락 된 모든 입력란에 대해 getter 및 setter를 제공 할 수 있습니다. 그런 다음 인터페이스 바인딩 된 getter의 모든 필드를 DTO의 setter로 복사하는 createOrder 메서드를 만들 수 있습니다. –

관련 문제