[씨#] Entity Framework 4 및… DTO와 함께 WCF 서비스를 사용하십니까?
"순수한 방법"이 무엇인지 정의하지 않으면 대답하기 어렵습니다. SOA 순수 또는 WCF 순수를 말하는가?
WCF 프록시는 서비스 계약에서 비즈니스 논리를 가져 오지 않기 때문에 이미 DTO입니다. WCF에서 생성 된 프록시 클래스 위에 또 다른 DTO 계층을 만드는 것은 중복 된 것처럼 보입니다.
대답하고 싶은 가장 큰 질문은 "이 솔루션의 SOA는 무엇입니까?"입니다. SOA를 준수하려는 경우 서비스 경계를 넘어 POCO 엔티티를 공유 할 수 없습니다. SOA는 서로 다른 계약에 관한 것입니다.
모든 SOA 기반으로 이동하면 웹 계층이 대부분의 시간에 작업 할 클래스가 어리석은 프록시이기 때문에 많은 기능을 잃게됩니다. 많은 논리를 반복해야하며 MVC 2가 제공하는 "메타 데이터, 구성에 대한 규칙"기능을 잃어 버렸습니다.
SOA 전문 용어를 파쇄기에 넣으면 ( http://soafacts.com/ ) 계층간에 비즈니스 논리 및 메타 데이터 정보를 공유하는 데 훨씬 더 쉽게 시간을 할애 할 수 있습니다. 웹 서비스의 유일한 소비자가 본인 인 경우이 방법이 최선의 선택 일 것입니다.
여기에서 DTO를 사용하여 POCO 엔터티 대신 유선을 통해 전송할 수 있습니다. 유일한 단점은 다시 반복되는 논리와 아무것도하지 않는 많은 보일러 플레이트 의식 코드입니다. 프로젝트의 크기에 따라 다릅니다. 작다면 DTO는 잊어 버리세요. 20 만 명의 개발자가 20 만 LoC로 작업한다면 DTO는 만들 가치가있을 것입니다.
-------------------jfar가 말했듯이 그것은 당신이 서비스를 소비하는 유일한 사람이 될 것인지 아니면 프레젠테이션 계층이 당신만을위한 것인지에 달려 있습니다.
나중에 수행하고 서비스를 사용하는 경우에만 wcf 서비스 경계를 넘어 POCO를 직렬화 할 수 있습니다. 이것은 내가 최근에 한 일이며 작동시키는 것에 대한 이 블로그 게시물 을 작성했습니다. 이렇게하면 앱 계층과 프레젠테이션 계층에서 동일한 엔터티를 사용할 수 있습니다.
도움이 되었기를 바랍니다.
-------------------EF와 함께 WCF를 사용할 때 DTO를 권장하는 가장 강력한 이유는 EF 데이터베이스 우선 클래스가 구현 종속성을 프록시 클래스로 끌어 오기 때문입니다. POCO 클래스와 함께 코드 우선을 사용하는 경우 구현 종속성이 없어야합니다.
POCO 클래스 만 반환하고 생성 된 프록시 클래스를 자세히 살펴보십시오. EF 인프라의 일부인 클래스에 아무것도 없는지 확인하십시오. 프록시 클래스가 깨끗한 경우 모든 설정이 완료되어야합니다.
출처
https://stackoverflow.com/questions/2006142