2009-11-03 2 views
3

n 계층 솔루션을 만들 때 비즈니스 개체를 노출하고 싶지 않지만 대신 DTO를 사용하십시오. 다른면에서 나는 객체를 이중으로 정의하고 항상 복사 코드를 작성하고 싶지 않습니다.POCO가 DTO에서 파생되어야 하는가 그렇지 않으면 더 좋지 않을까요?

내 아이디어는 모든 필요한 필드와 속성을 포함하고 있지만 로직 (상태는 없음)을 포함하는 DTO를 작성하는 것입니다.

그런 다음 DTO에서 비즈니스 개체를 파생시키고 비즈니스 로직으로 비즈니스 개체를 확장하고 DTO 기본 클래스 속성에서 작업합니다. 이 객체들은 또한 사용 된 ORM (Hibernate)에서 영속화 된 객체들이다.

이러한 접근 방식을 사용하면 서버 측에서 비즈니스 개체를 작업하고 클라이언트에 직접 전달할 수 있습니다 (파생되므로 파생되므로). 그렇게하면 비즈니스 로직을 폭로하고 많은 코드를 저장하지 않아도됩니다.

접근 방법이 합리적인 것이라고 생각하십니까?

감사합니다,

세바스찬

+0

클라이언트에서 DTO를 가져올 때 복사 복사본없이 비즈니스 개체를 어떻게 강조 할 것입니까? –

답변

6

당신은 다음을 고려 할 수 있습니다.

"...의 도메인 객체의 DTO 모르고 유지하는 것은 DTO는 서로 다른 상황에서 을 재사용 할 수 을 마찬가지로 할 수 있습니다 때문에, 개체에 DTO에 대해 알리고 싶지 않으므로 이 DTO 을 변경하면 도메인 로직의 코드를 변경해야하므로 이는 le 광고에 유지 관리 악몽.

최상의 해결책은 비즈니스 개체에서 DTO를 만드는 어셈블러 패턴 (또는 그 반대로) 어셈블러 패턴을 사용하는 것입니다. 어셈블러

또한 Pattern and Practice: Data Transfer Object

에서, 나는 나 자신에 의해 그것을 사용하지 않은 .... "또한 엔터프라이즈 애플리케이션 아키텍처의 패턴에 언급 된 매퍼 패턴의 특수한 예이지만, 뿐만 아니라 AutoMapper을 체크 아웃 할 수 있습니다.

+0

+1은 "DTO를 변경하면 도메인 로직에서 코드를 변경해야합니다." –

+0

FWIW, AutoMapper는 꽤 좋습니다. – Gavin

1

나에게 합리적인 소리. Linq to SQL에서 비즈니스 객체는 부분 클래스를 사용하여 DTO에서 파생됩니다.

0

DTO들 그들은 2 또는 3 BO에서 속성을 포함 할 수 BO에서 차이가있을 수 있음을 염두에두고 "그 DTO들로부터 그럼 난 내 비즈니스 개체를 파생 것"

관련 문제