2011-05-05 5 views
3

EF 4에서 NTier 디자인을 구현할 계획입니다. EF 자체가 데이터베이스에 매핑 한 테이블에 엔티티 기반을 생성한다는 것을 알고 있습니다. 내 질문은, DTO (데이터 전송 개체)의 사용은 무엇입니까 또는 정말 필요한가요? EF가 생성 한 모든 엔티티에 대해 다른 DTO 엔티티를 생성해야하기 때문에 리던던시를 촉진하는 것처럼 보입니다. 나를 안내 해줘. 감사합니다 ...엔티티 프레임 워크의 DTO

답변

9

DTO는 계층이 다른 프로세스 또는 다른 서버에있는 경우 물리적 계층간에 필요한 데이터 만 전송하는 데 사용되는 데이터 전송 개체입니다. 사람의 이름과 나이 만 공개해야하는 경우 주소, 고용, 자녀 등을 양도 할 필요가 없습니다. 따라서 이름과 나이만을 포함하는 간단한 전송 개체를 만듭니다.

EF는 데이터베이스 레코드를 속성에 매핑하는 엔터티를 만듭니다. EF 엔티티는 (부분 클래스에 의해) 사용자 정의 된 계산 속성 및 메소드를 사용하여 전체 도메인 객체로 확장 될 수도 있습니다. 도메인 객체는 다른 티어에 직접 노출되어서는 안되며 DTO가 사용되는 다른 경우입니다.

편집 :

하기 DTO를 사용하는 마지막 상황 크로스 경계 호출을 최적화합니다. 한 계층에서 프로세스 경계를 ​​넘어 다른 계층의 메서드를 호출하는 계층화 된 응용 프로그램을 사용하는 경우 성능이 저하되므로 (느려짐) 이러한 호출을 최소화해야합니다. 그렇게하기 위해 복잡한 DTO를 생성하여 복잡한 데이터 구조 (여러 엔티티)를 원격 계층의 일부 마스터 조작 (facade)으로 전송할 수 있습니다.이 DTO는 데이터를 사용하여 여러 비즈니스 운영을 실행합니다.

+0

Im DTO 생성을 피하기 위해 3 층 디자인의 각 레이어에 걸쳐 EF에서 생성 된 엔티티를 사용할 계획입니다. UI는 DAL (ntier 규칙을 위반하는)에 직접 액세스 할 수 있습니다. 그 접근에 어떤 의미가 있습니까 ?? – clydePHI

+0

레이어와 계층이 동일하지 않습니다. 계층은 논리적 경계이고 계층은 물리적 경계입니다. –

+0

그래서 내가 정말로 의미하는 것은 레이어입니다. DLL (BL, DAL)로 표시되는 레이어는 동일한 컴퓨터에 배포됩니다. – clydePHI

0

DTO는 엔티티의 일부 또는 함께 묶은 일부 엔트를 전달해야 할 때 가장 유용합니다. 또한 엔티티는 실제로 엔티티 컨텍스트에 묶여 있으므로 외부 엔티티를 전달할 때 엔티티를 실행하고 데이터를 변경하는 등의 작업을 수행 할 수 있습니다. 개체를 외부로 전달하려는 경우이 경우에 이점을 얻을 수 있습니다. DTO를 사용합니다.

+0

그렇다면 DTO는 계층화 된 EF 애플리케이션을 만들 때 실제로 선택 사항입니까? – clydePHI

+0

WCF/WS를 사용하지 않기 때문에 단순한 단일 웹 프로젝트 일뿐입니다. – clydePHI

+0

DTO가 없으면 엔티티가 DTO로 바뀌고 엔티티에 메소드를 추가하거나 (내부 메소드를 작성하지 않아야 함) 결국 엔 절차 적 애플리케이션 모델이됩니다. 따라서, n-tier만으로는 충분하지 않습니다. n-tier applicaiton 모델에서 몇 개의 레이어를 사용할 것입니까? EntityFramework를 사용하고 있기 때문에 DAL과 도메인 모델은 동일합니다. DTO를 사용하지 않을 경우 PresentationModel도 같고 UI 레이어에서보기 모델을 사용하지 않을 경우 간단한 웹 프로젝트를 위해 n 계층 응용 프로그램을 1 층 ( – hazimdikenli

관련 문제