2015-01-13 4 views
1

우리는 새로운 다중 계층 아키텍처를 시작합니다. 과거에는 AutoMapper를 사용하여 데이터 전송 객체를 비즈니스 객체에 매핑하고 그 반대의 경우도 마찬가지였습니다. 동료는 매핑 대신에 비즈니스 객체 내에 dto를 래핑해야한다고 제안했습니다. 아마도 비즈니스 객체의 생성자에 dto를 삽입함으로써 가능할 것이다. 그런 다음 매핑없이 즉시 dto의 속성 값에 액세스 할 수 있습니다.비즈니스 개체 안에 dto를 배치하는 것이 좋습니다.

질문 :

이 접근법을 권장합니까?

비즈니스 개체가 dt를 알고 있으면 밀 결합을 도입한다는 것을 알고 있습니다. 또한 유연한 매핑을 사용하여 일반적으로 n : m 관계가되는 비즈니스 개체와 dto 사이에 1 : 1 관계를 만들어 유연성을 잃어 버릴 수 있습니다.

(참조 : Best Practices For Mapping DTO to Domain Object?)

이는 이유는 아무도 래퍼 방법을 사용하는 것 또는 내가가 someting를 그리워 환급인가? 당신의 도움에 대한

public class BusinessObject 
 
{ 
 
    private Dto dto; 
 

 
    public BusinessObject() 
 
    { 
 
     this.dto = new Dto(); 
 
    } 
 

 
    public BusinessObject(Dto dto) 
 
    { 
 
     this.dto = dto; 
 
    } 
 

 

 
    public int Id 
 
    { 
 
     get { return dto.Id; } 
 
     set { dto.Id = value; } 
 
    } 
 
} 
 

 
public class Dto 
 
{ 
 
    public int Id { get; set; } 
 
}

행크스 :

는 저는 여기에 "포장"로 무슨 뜻인지 빠른 데모입니다!

토르스테

답변

0

논란의 여지가 있습니다. 이 blog post에서 처음이 접근법을 보았습니다.

이점은 분명합니다. 정말 코드를 간소화하고 간소화합니다. 이제 귀하의 비즈니스 객체 (POCO)는 DTO가 이미 커버하고있는 접근 자 (accessor)와 뮤 테이터 (mutator)를 다시 만들 필요가 없으며 DTO의 속성을 참조 할 수 있습니다. DTO를 비즈니스 객체 생성자에 전달하기 만하면되기 때문에 비즈니스 객체를 만드는 것이 훨씬 쉽습니다. 객체의 DTO 부분을 잡을 필요가 있기 때문에 지속성있는 비즈니스 객체가 훨씬 더 쉽습니다.

이 접근법에는 몇 가지 단점이 있습니다. 당신이 지적했듯이, 당신은 어느 정도 1-1 매핑으로 고정되어 있습니다. 또 다른 단점은 validation or business logic에서 비즈니스 개체가 개체의 특정 속성 (DTO가 개체를 소유하고 있기 때문에)에 대해 적용하지 못할 수 있다는 것입니다.

DTO를 비즈니스 객체 (POCO)에 채워 넣는 것보다 다소 큰 단점은 객체가 더 이상 자신의 상태를 관리하지 않는 경향이있는 코드에서 떠날 수있는 행동입니다. expressed here으로 특정 기능을 담당하는 코드의 위치를 ​​찾기가 훨씬 어려워 질 수 있습니다. 또한 객체가 외부 상태로 설정 될 때 클래스를 조금 더 위험하게 만듭니다.

+0

안녕하세요, Derek, 답변 해 주셔서 감사합니다. 래퍼 접근법이 처음에는 나중에 구현할 때 문제가 발생할 수있는 상황을 완화하는 것처럼 보이는 기본적인 결과에 동의합니다. 유효성 검사와 느슨한 결합이 문제가되지 않는 원시/비 편집 가능 객체에 대해 래퍼 접근법을 사용하는 경향이 있습니다. 감사합니다. Torsten – user2145393

+0

Torsten,이 문제에 대한 귀하의 의견에 동의합니다.소프트웨어 아키텍처에서이 특정 주제에 대해 일률적 인 해결책이 없으며 특정 시나리오의 경우 단점이 염려되지 않는 곳에서 사용할 수 있습니다. –

관련 문제