2012-12-03 9 views
1

컨트롤러가 뷰로 다시 전달되는 데이터를 가져와야합니다. 저장소로 전달하려면 어디에서 연결해야합니까? 다음은 그 예입니다. 이것은 내 컨트롤러 중 하나의 일부입니다.내 컨트롤러에서 데이터베이스 연결을 열어야합니까?

using (var connection = this.GetActiveConnection()) 
{ 
    var repository = new RefRepository(connection); 
    var codes = repository.GetPoACodes();  
} 

컨트롤러에서 연결을 여는 것이 좋지 않습니까? 컨트롤러를 통해 전달하지 않으면 리포지토리에 연결을 어디서 전달해야합니까?

+0

걱정을 완전히 명예롭게 유지하려면 모델 네임 스페이스 내에서해야합니다. 어쩌면 내가 네게 물어 본다. 모델 네임 스페이스에서 왜 그렇게하지 않겠습니까? :) – gardarvalur

+0

왜 저장소에 연결을 전달 하시겠습니까? 앱에서 여러 dabatases를 사용하고 있습니까? 이것은 다중 점유 체제입니까? 그렇다면 분석 할 다른 사용 사례입니다. – Nathan

답변

4

실제로 리포지토리는 연결 자체를 처리해야하며 컨트롤러 관련 사항이 아니어야합니다. 컨트롤러 클래스는 얇게 유지되어야하며, 뚱뚱한 경우 코드 냄새가 날 것입니다.

그것은 것 아주 좋은 연습 당신은 DbContext 또는 세션과의 SessionFactory (EF이나 NHibernate에), 거래 또는 즉 단위를 처리하기 위해, 그 의존성를 연결하는 (Ninject에, StructureMap, ... 등) 종속성 주입 프레임 워크를 사용할 수 있는지 여기까지 가려면 작업 패턴, 예외 처리 및 로깅 중 하나를 선택하십시오.

당신은 비주얼 스튜디오를 사용하는 경우는 다음 프로젝트 템플릿에 당신은 코드를 읽고, 샘플 프로젝트를 생성하고, 코드의 구성 방법을 배울 수 있습니다, 또한 저장소를 생성하는 옵션이 있습니다.

article에서 웹 API 헤더 아래에서 방법을 찾을 수 있습니다.

1

아니요, 컨트롤러에서 데이터베이스 연결을 열지 않아야합니다.

컨트롤러는 데이터베이스 스키마와 다른 "도메인 모델"과 대화해야합니다.

아마도 귀하의 저장소가이를 처리해야합니다.

Entity Framework 또는 NHibernate를 사용하는 경우, 예를 들어 더 잘 처리 할 수 ​​있습니다.

관련 문제