2010-06-01 3 views
2

diff 클라이언트 (asp, sl)에 대한 데이터를 처리하는 SOA가 있습니다. 이 디자인의 기본은 비즈니스 모델의 영역입니다. 운송을 위해 고객에게 보여주기 위해 DTO를 사용합니다. 도메인을 DTO에 매핑하려면 AutoMapper를 사용합니다. 이제 고객으로부터 새로운 엔티티를 유지해야합니다. 이 시나리오에서도 DTO를 사용하고 싶습니다. 그래서 나는이 디자인에 익숙하지 않기 때문에 몇 가지 질문을 가지고있다.NHibernate. DTO -> Domain

1) 클라이언트에서 DTO를 빌드하고 유선 웹 서비스로 전송하는 것이 좋은가요? 나도 내 도메인을 통과해야합니까?

2) 하나의 도메인에 여러 개의 DTO가있을 수 있습니다 (하나는 그리드에 표시하고 하나는 저장). 저축을 위해서 나는 클라이언트에서 모든 비 기본 소품을 설정해야합니다.

3) DTO -> 도메인. AutoMapper를 사용하여 int를 얻을 수 있다면이 ID에 대해 NHibernate Proxy를 생성 할 수 있습니다. 그렇지 않으면 수동으로해야합니다.

당신의 expierence와 연습은 아주 재미있다. 답변 해 주셔서 감사합니다.

답변

-1

도메인 모델 엔티티 대신 유선을 통해 DTO를 사용하면 아키텍처가보다 유연 해집니다. 도메인 당 여러 개의 DTO를 가질 수 있습니다.

3

화면 및 명령 관련 DTO를 사용하는 것이 좋습니다.

예를 들어 사용자가 고객 디스플레이 화면을 볼 때 그 고객에 대한 정보를 모두 포함하는 (또는 대부분의 경우 게으른로드가 필요한 경우) 단일 DTO가 있습니다.

이 기술의 가치는 화면을 설정하는 것과는 대조적으로 도메인을 모델링 할 수있는 여러 소스에서 데이터를 가져올 수 있다는 것입니다. 또한 매핑을 업데이트하기 만하면 화면 걱정없이 도메인을 변경할 수 있습니다.

프로그래밍 언어에 따라 도메인과 DTO 사이의 매핑을 쉽게 만들 수있는 AutoMapper (C# 용)과 같은 도구가있을 수 있습니다.

+0

이 아키텍처를 사용하는 것이 좋습니다 : DTO + NHibernate serviceLayer; 당신은 concurency 목적을 위해 도메인 (자식 컬렉션 포함)에서 DTO로 버전/타임 스탬프를 매핑/복사합니까? – kite

+1

도메인 객체가 변경되었다는 것을 알고 있다면 중요합니다. 그렇다면 복사 할 것입니다. 거기에는 내가 마지막으로 변경된 부분이 완벽하게 수용 가능한 전략 인 곳에서 작업 한 스크린이 많이 있다고합니다. 사람들이 모든 화면에서 어떤 것이 바뀌 었다고 경고하면 사용자의 성가 시게됩니다. –

+0

Thanks shane, 괜찮 으면 1 번만 더 질문 :) UI 그리드에서 일괄 업데이트/삭제/삽입을위한 DTO (DTO 컬렉션) 변경/더티 추적 관련. 당신은 힌트/NHibernate CRUD 서비스 레이어 + automapper로 이것을 구현하는 방법에 대한 리소스에 대한 링크가 있습니까? 나는 바퀴를 재발 명하고 싶지 않다. (삭제 플래그에 대한 부정 ID, 삽입에 대한 새로운 GUID, DTO의 더티 속성에서 도메인 속성의 일부를 업데이트하는 방법, 모든 DTO의 속성에서 도메인 속성을 업데이트하는 방법). – kite