2009-05-11 5 views
8

Rob이 수행하는 방식에 따라 Linq to SQL 마법사에서 생성 된 클래스가 있으며 POCO 인 클래스의 복사본이 생성됩니다. 내 저장소에서 나는 SQL 모델이 포항 강판보다는 Linq에를 반환 :EF 개체보다 저장소에서 POCO 개체를 반환 할 때의 장단점은 무엇입니까?

 
return from c in DataContext.Customer 
     where c.ID == id 
     select new MyPocoModels.Customer { ID = c.ID, Name = c.Name } 

내가 이것의 장점은 POCO 모델이 쉽게 그래서 이것은 내 코드를 더 테스트 할 것 인스턴스화 될 수 있다는 것을 이해합니다.

저는 이제 Linq에서 Entity Framework로 SQL로 이동 중이며 EF 책의 절반 정도를 사용하고 있습니다. EF 엔티티가 아닌 내 리포지토리에서 POCO를 반환하면 많은 이점을 누릴 수 있습니다.

아직 단위 테스트를 포용하지 못했기 때문에 이러한 추가 POCO를 만들고 코드를 작성하는 데 많은 시간을 낭비하고있는 것처럼 느껴집니다. 나는 또한 내 물건을 추적 할 수 없기 때문에 EF의 많은 혜택을 잃을 것이다.

누구나이 ORM/저장소에 관련된 상대 newb에 대한 조언이 있습니까? DDD 같은 예를 들어 :

앤서니

+0

Rob Conery의 Storefront 시리즈를 따르고 있다고 말하고 싶었던 저의 첫 번째 라인을 놓친 것을 깨달았고, 소규모 프로젝트에서 그의 저장소 패턴을 사용하기 시작했습니다. – littlecharva

답변

6

사람이 자동 생성 된 개체 (예 : LINQ to SQL)를 좋아하지 않는 또 다른 이유는 기본 제공되는 "마법"때문입니다.

보통 마법은 눈에 보이지 않지만 결코 눈치 채지 못합니다. 그러나 이러한 객체 중 하나를 직렬화 한 다음이를 역 직렬화 (예 : 웹 서비스 사용) 할 경우 데이터 소스에 대한 내부 연결이 끊어지며 특별한 해킹은 "마법을 되돌려 놓기"위해 고용되어야합니다.

POCO를 사용하면 이러한 종류의 것에 대해 걱정할 필요가 없으며 데이터와 서비스 계층을 더 잘 구분할 수 있습니다. 단점은 물론 지루한 POCO -> 마법 오브젝트와 마법 오브젝트 -> POCO 변환 코드를 많이 작성해야한다는 것입니다. 하지만 결국에는 대개 가치가 있다고 생각합니다. 특히 크고 복잡한 프로젝트의 경우.

4

주된 이유는 많은 사람들이 특정 사고 방식과 자신의 모델을 개발하고자한다는 것이다. 상태 (enum) 대신 특정 패턴 (예 : Spec 또는 State)을 사용하거나 인스턴스화를 위해 Factory를 사용할 수도 있습니다.

개체가 복잡해지면 테이블을 개체로 사용하려고하면 개체가 끊어집니다. 단순한 사이트는 정상적으로 작동합니다. 그러나 큰 일을 할 때 추한 상태가됩니다.

언제나 그렇듯이 프로젝트에 따라 달라질 수 있습니다.

2

나의 경험은 당신이 어떤 복잡한 쿼리를을 writting 시작할 때 .Include 방법은 가치가 있다는 것입니다 그리고 당신은 자신을 발견 할 것이다 중 하나

가) 당신이 원하는 데이터 또는 B)의 남용을 얻기 위해 쿼리를 많이을 writting 익명 형식을 사용하여 단일 쿼리에서 데이터를로드 한 다음 해당 데이터를 엔티티에 전달하기 위해 많은 코드를 작성합니다.

이동 방법은 IMHO입니다.

관련 문제