문제

MVC 상점을보고 있으며 저장소 클래스에서 iqueryable이 반환되는 것을 보았습니다. LINQ를 사용하지 않는지 궁금해하는 것이 그 개체를 반환하는 것이 합리적입니까? LINQ가 지연된 실행으로 인해 LINQ의 경우 의미가 있으므로 서비스 계층에 필터링을 추가하는 것이 의미가 있지만 LINQ를 사용하지 않으면 많은 경우 DB에서 필터링을 원할 것입니다. 이 경우 리포지토리에 필터링을하는 메소드를 추가합니까? 내가한다면, 서비스 계층이 정말 유용합니까?

도움이 되었습니까?

해결책

인수는 어느 쪽이든 이루어질 수 있습니다.이 최근 블로그 게시물을 참조하십시오. 내 저장소가 iqueryable을 노출시켜야합니까?

다른 팁

Rob Conery가 MVC 매장에 넣은 IQueryable Things는 혁신적이지만 리포지토리를 만들 때는 결코 표준이 아닙니다. 일반적으로 리포지토리는 도메인을 데이터베이스에 그리고 데이터베이스에서 매핑 할 책임이 있습니다. iqueryable을 반환하는 것은 실제로 매핑을 수행하지 않으며 서비스 계층에 의존하여이를 수행합니다. 이것은 장점과 단점이 있지만, 그것이 유일한 방법은 아니라고 말하면 충분합니다.

그러나 모든 중복 코드로 인해 서비스가 약간 냄새가납니다. 예를 들어, 데이터베이스에서 모든 사용자 목록을 얻으려면 리포지토리와 서비스 계층 모두에서 해당 기능을 정의해야합니다. 그러나 서비스 계층이 빛나는 경우 데이터베이스와의 여러 트랜잭션이 하나의 작업에 필요할 때입니다.

서비스 계층에 iqueryable을 노출시키는 데 필요한 문제는 서비스 계층 코드를 깨지 않고 웹 서비스 뒤에 저장소 레이어를 랩핑하고 싶다면 사용하지 않고는 할 수 없었습니다. ado.net 데이터 서비스 그러나 모든 저장소 코드는 본질적으로 중복됩니다.

작은 앱에서는 매우 생산적 일 수 있다고 생각하지만 스케일링 및 배포를보기 시작하면 좋은 것보다 더 나쁩니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top