2014-10-02 2 views
0

내 질문은, 어떻게 내가 asp.net mvc에서 모델에 사용자 정의 쿼리를 추가합니까, 나는 그들이 컨트롤러에서 쿼리를 만든 모든 자습서입니다.asp.net mvc 모델에 쿼리를 추가하십시오

지금까지 제 독서에서 컨트롤러는 데이터베이스를 인식해서는 안되며 모든 쿼리는 모델에서 만들어야한다고 말합니다. 그러나이 예제를 찾을 수없는 것 같습니다.

나는 그것을 시도하지만 모델에서 사용할 수있는 DbContext가 없으므로 어떻게해야합니까?

public class UserRepository:IUserRepository{ 
    public List<User> GetUsers() 
    { 
    //Your code and query here 
    } 
    public void AddUser(User user) 
    { 
    //Your code and query here 
    } 
} 

그런 다음 당신은 당신의 UserController에이 클래스를 통과하고 기능의 호출 : 당신이 사용자 개체가있는 경우

+0

모델에 쿼리를 추가하지 마십시오. 컨트롤러에서 쿼리를 만들거나 컨트롤러가 쿼리 결과를 반환하는 서비스를 호출하도록하십시오 –

+0

내 모델에 쿼리를 추가하지 않습니까? 모든 자습서에 컨트롤러가 데이터베이스를 인식해서는 안된다는 메시지가 표시됩니다. 액세스 레이어의 작업, 당신이 나에게 말하고있는 방식은 모든 자습서에서 보는 방법이지만, 왜이 방법을 사용합니까? –

+0

어떤 튜토리얼을 참조하고 있습니까? MS [ASP.NET MVC에 대해 배우기] (http://www.asp.net/mvc) 자습서에는 제어기 메소드의 모든 db 컨텍스트가 있습니다 (Mehrdad가 지시 한대로 DI를 사용하여 리포지토리를 사용하는 것을 선호하지만). –

답변

1

여러 가지 방법으로이를 구현할 수 있으며 각각 장단점이 있습니다.

1) 도메인 모델 패턴, 마틴 파울러의 Domain Model Pattern
저자,이 정의 (파울러, 2003) 제공 : 여기에 몇 가지 appraoches은

모두를 통합 도메인의 개체 모델 행동 및 데이터.

이 패턴을 사용하면 도메인 모델이 동작을 정의하고 DB 쿼리로 변환되거나 변환되지 않을 수 있습니다.

2) Repository Pattern

는 데이터를 검색하고 모델에 작용하는 비즈니스 로직에서 개체 모델에 매핑 로직을 분리하는 저장소를 사용합니다. 비즈니스 논리는 데이터 소스 계층을 구성하는 데이터 유형에 대해 불가지론 적이어야합니다. 예를 들어, 데이터 원본 계층은 데이터베이스, SharePoint 목록 또는 웹 서비스 일 수 있습니다.

@Mehrdad가 지적했듯이이 패턴을 사용하면 컨트롤러 DB 문제가 해소되고 모든 DB 논리가 한 곳에서 유지됩니다.

3) Command Query Separation pattern (내가 좋아하는)는

이 모든 방법은 작업을 수행하는 명령 또는 발신자에 데이터를 반환하는 쿼리 있지만 두해야 하나 상태. 즉, 질문을하면 답변이 변경되어서는 안됩니다. 더 형식적으로, 메소드는 참조가 투명하여 부작용이없는 경우에만 값을 리턴해야합니다.

:이 CQS 및 NOT CQRS 패턴

CQS 및 저장소 패턴 사이의 차이는 엔티티 프레임 워크로, DbContext 이미 DbContext 일과의 단위 인 (당신을 위해 저장소 패턴을 감싸고 있다는 것입니다 DbSets는 리포지토리 임). 따라서 다른 저장소 계층을 만드는 것이 중복됩니다. CQS가 제공하는 것은 쿼리/명령을 세부적으로 제어 할 수 있으며 핵심 비즈니스 로직을 오염시키지 않으면 서 추가 로직을 처리 할 수있는 데코레이터를 통해 확장 할 수 있습니다.여기에 CQS에 대한 몇 가지 좋은 링크입니다

answer 함께 CQS 함께 사용할 수 얻을 수있는 방법 저장소 패턴의 좋은 예입니다.

이 모든 것이 상당히 어려울 수 있으므로 시간을 투자하고 이러한 패턴을 사용하여 Proof-Of-Concept 프로젝트를 구현하고 전체 아키텍처에 적합한 아키텍처를 결정하는 것이 좋습니다.

0

당신은 일반적으로 예를 들어 그에 대한 저장소 패턴을 사용할 수 있습니다. 보시다시피 IUserRepository를 추가하여 종속성 주입을 사용하는 경우 사용할 수 있습니다.

관련 문제