저는 합리적인 규모의 VB.NET 2.0 앱 (데이터 세트 포함)을 C# 4.5 (EF4 포함)로 마이그레이션하고 있습니다.EF4 complex Select() : 비즈니스 계층의 IEnumerable 또는 IEnumerable <MyCustomDto>을 반환 하시겠습니까?
우리의 "검색"기능은 다음과 같습니다. 이제는 EDMX에 정의 된 클래스의 IEnumerable을 반환합니다.
public IEnumerable<Product> GetProductsByCategory(int categoryId)
그러나 우리의 EF4이 방법은 더 복잡한, 사용자 (익명) 유형을 생산하고있다 "()를 선택합니다"때 더 복잡하다 : 그래서 이런 일이 간단 결과에 대응하는 생성 된 클래스가 없습니다.
이 함수는 계층 경계 (Business to UI)를 넘어야하기 때문에 적절한 솔루션은이 쿼리에 대한 사용자 지정 형식을 정의한 다음 해당 형식의 IEnumerable을 반환하는 것이라고 생각했습니다. 예 :
public IEnumerable<ProductAccountSummary> GetProductAccountSummariesByCategory(int categoryId)
여기에서 ProductAccountSummary
은 손으로 제작 한 DTO (즉, POCO)이다.
그러나 코드 검토 중에 팀 리더가 내 접근 방식에 실패했습니다.
public IEnumerable GetProductAccountSummariesByCategory(int categoryId)
.... 우리는 여전히 오버 헤드없이 등 우리의 UI 그리드에 IEnumerable을 결합 할 수있는 이유 DTO를 손-공예 : 그는 DTO를 삭제하고에 메소드 서명을 변경달라고 부탁이야 우리는 사용자 정의 유형을 사용해야 할 때마다
그래서 제 질문은 :
EF4에서- , 계층 경계를 넘어 사용자 정의 형식의 컬렉션을 전달하는 일반적인 방법은 무엇인가? IEnumerable (묵시적으로, "객체")을 반환하는 것은 나에게 맞는 것 같지 않습니다. 내가 놓친 게 있니?
좋은 질문입니다. 필자는 항상 응용 프로그램 계층간에 DTO를 사용합니다. 왜 비 일반'IEnumerable'을 선택하겠습니까? – nrodic
코멘트가없는 "-1"? 거친! 내 팀 리더가되어야합니다 :) – Merenzo