문제

ASP.NET MVC 및 리포지토리 모델을 사용하여 프로젝트를 진행 중입니다. 저장소 클래스 와이 저장소 클래스를 소비하는 서비스가 있습니다. 내 질문은 : 저장소 클래스에서 iqueryable을 반환 한 다음 목록을 생성하기위한 서비스에서 "Where"및 ".orderby"를 사용하는 것이 옳습니까? 그렇다면 모범 사례입니까?

감사!

도움이 되었습니까?

해결책

우선 : 여기에는 "오른쪽"또는 "잘못된"것이 없습니다. 그것은 당신과 당신이 구축하는 시스템에 가장 적합한 문제의 문제 일뿐입니다. 예를 들어, Rob Conery는 당신이 묘사하는 패턴과 함께 Storefront라는 ASP.NET 샘플 응용 프로그램을 수행했으며 큰 불꽃 전쟁을 일으켰습니다. 토론의 많은 부분은 그의 책에서 에릭 에반스 (Eric Evans)가 묘사 한 "원본"으로 간주되는 저장소 패턴을 중심으로 진화했습니다. 도메인 구동 설계 또한 리포지토리의 인터페이스를 쿼리 인터페이스가 아닌 실제 인스턴스 (인스턴스 목록)를 수락하거나 반환하는 리포지토리의 인터페이스를 설명합니다.

이론을 위해 너무 많이. 시스템을 위해 무엇을 선택해야합니까? 내가 정복 가능한 경로를 직접 선택하지 않은 이유는 실제로 클라이언트 계층에 약간의 지속성 전략이 누출되기 때문입니다 (이 경우 서비스 계층이기). LINQ를 사용하여 데이터베이스에서 객체를 검색하는 경우 [데이터베이스 액세스 방법 (SQL, Entities, ...)]으로 주로 iqueryable을 반환하는 것이 합리적이기 때문입니다. 그래야만 쿼리 결과를 최적화해야합니다. 일부 데이터베이스 액세스 코드 코드를 사용하는 경우 전체 목록을 가져 오는 경우 LINQ를 사용하여 리포지토리에서 객체에 노출되는 경우에는 이해가되지 않습니다. 요컨대 : 클라이언트 계층을 LINQ 기반 데이터베이스 액세스 전략에 묶습니다.

약간의 순수 주의자이기 때문에, 나는이 넥타이를 저장소에서 LINQ에 표면하지 않기를 원하며, 저장소 작업의 매개 변수를 통해 어디에 및 주문별 기준을 제공하도록 선택할 것입니다. 저장소에서 모든 검색 최적화를 수행하고 깔끔한 깨끗한 도메인 객체 세트를 반환 할 수 있습니다.

결국 그것은 다음과 같습니다. 당신에게 가장 적합한 것은 괜찮습니다.

다른 팁

왜 그것이 문제가 될지 모르겠습니다. 서비스 계층에서 검색 할 데이터가 더 구체적으로 되려면 응용 프로그램과 데이터베이스간에 데이터가 전송되는 데이터가 적습니다. 즉, 효율성이 높아집니다. 그렇게하면 게으른로드를 구현하거나 절대적으로 필요할 때 데이터를 얻는 것도 의미합니다. 웹의 무 상태를 고려할 때 이것은 좋은 것입니다. 당신은 당신을 위해 모든 데이터를 검색하고 싶지 않습니다. ~할 것 같다 그걸 써.

다시 말해, 전체 사용자 목록을 얻는 것은 의미가 없습니다. 이름은 단순히 "Jackolantern"인 사람을 선택하는 것이 아닙니다.

생각하는 가장 좋은 방법은 MSSQL에서 MySQL로 전환하기로 결정하면 비즈니스 로직을 복제해야합니까? 그렇다면 저장소를 잘못 활용하고 있습니다.

그렇습니다. 저장소가 iqueryable을 반환하는 데 매우 만족하지만 하나의 경고가 있습니다. 모든 공급자에서 몇 가지 LINQ 기능을 사용할 수는 없습니다. 예를 들어, 단일 / SingleordeFault 메소드는 LINQ에서 엔티티에서 사용할 수 없습니다. 따라서 서비스 계층이 사용되는 콘크리트 구현에 따라 일부 후프를 뛰어 넘어야 할 수 있습니다.

보통 리포지토리 클래스의 인터페이스를 도메인 계층에 넣고 서비스 계층의 실제 구현을 넣습니다.

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