2013-06-25 5 views
1

ASP.NET MVC 프로젝트에서 작업하고 있습니다. 나는 데이터 액세스 레이어를 구현하는 방법을 궁금하네요 BlogApp.Web (ASP.NET MVC 응용 프로그램), BlogApp.Data (클래스 라이브러리)ASP.NET MVC 데이터 액세스 레이어

: 내 솔루션에서 나는 다음과 같은 프로젝트가있다. EntityFramework Code First 접근 방식을 사용하고 싶습니다. 저장소 패턴에 대해 생각하고 있었지만 이것이 정말로 필요합니까? 나는 이것이 정말로 필요하지 않은 ORM 위에있는 다음 계층에 불과하다는 것을 읽었습니다. 따라서 다음과 같은 메소드를 작성하는 대신 :

GetAllPosts(Tag t) { 
    db.Posts.Where(p => p.Tags.Contains(t)).Skip(x).Take(y).Select(p => p); 
} 

컨트롤러에 db 컨텍스트를 작성하고 동일한 쿼리를 작성합니까? 내 모델 주위에 페이징을 구현하고 래퍼를 작성할 필요가 없습니다.

+0

DRY 원칙을 참조하십시오. 반복하지 마십시오. 단기간에 설치하는 데 시간이 오래 걸릴 수 있지만 (복사 및 붙여 넣기에 비해 오래 걸리지는 않음) 장기적으로 유지 관리 및 테스트에 소요되는 시간이 절약되므로 디버깅 시간이 절약됩니다. 처음부터 코드를 작성합니다. – TODOName

답변

0

이 질문이 여기에 속하는지 확실하지 않습니다.

어쨌든 컨트롤러에 데이터 액세스 논리를 쓰고 다른 컨트롤러에서 동일한 논리가 필요한 경우 어떻게 할 것입니까? 복사 - 이것을 새로운 컨트롤러에 붙여 넣으시겠습니까? 그것은 단지 좋지 않다. 언제든지 복사하고 붙여 넣기를해야합니다. 여기에 뭔가 잘못된 것이 있어야합니다 (일명 코드 냄새).

로직을 다른 레이어로 분리하면 코드를 유지 관리하기 쉽고 테스트 할 수 있습니다. 날 믿어!

1

리포지토리 패턴에 대해 들었을 수있는 점은 일부 캠프에서 선호도가 떨어지고 있다는 것입니다 (예 : Jimmy Bogard's blog 참조). 이는 응용 프로그램이 매우 단순하지 않다면 컨트롤러에서 직접 쿼리를 작성해야한다는 의미는 아닙니다.

앞서 언급했듯이 컨트롤러는 컨트롤러가 사용할 수있는 한 곳에서만 쿼리를 작성해야합니다. 이는 리파지토리 (Repository) 메서드 또는 전용 쿼리 개체 (Concurrent Query Object)에 있습니다. 둘 다 더 나은 추상화를 제공하고 중복을 피할 수 있습니다.

간략하게 - 응용 프로그램이 데이터 액세스 계층에 대해 별도의 어셈블리가 필요한 여러 프런트 엔드를 사용합니까? 그렇지 않다면 두 어셈블리를 병합하고 네임 스페이스를 사용하여 정리하는 것이 좋습니다.

관련 문제