2012-10-09 10 views
4

가능한 중복은 :
Where to write Database and Business logic in MVC?MVC3 아키텍처에서 DAL 레이어가 필요하지 않습니까?

난 그냥 MVC3 패턴으로 시작했습니다. MVC3에서 데이터 액세스는 어떻게합니까? 'MODEL'을 데이터 액세스 레이어로 만들거나 'DAL'레이어를 추가하고 'MODEL'레이어에서 불러 옵니까?

+1

이것은 여러 번, 여러 번, 여러 번 요청되었습니다. –

+0

질문은 우리의 응용 프로그램에 더 많은 유연성이 필요합니까 ?? 대답은 그렇습니다!이 게시물에 우리의 공헌에 의해 제안 된 예제가 많이 있습니다, 당신의 시스템에서 DAL을 원할 때, Db와 어플리케이션 로직으로 트랜잭션을 분리하고 싶습니다. 그래서 두 개 중 하나가 모든 상층부에 직면 해 있거나 변경이있을 경우 DBContext 클래스와 애플리케이션 사이의 DB 또는 애플리케이션, 레이어, 인터페이스 또는 추상 클래스를 방해하지 않아도됩니다. –

답변

0

마지막 MVC3 프로젝트에서 작업 할 때 GeekDinner와 같은 다양한 샘플에서 데이터를 이해하기 위해서는 Entity Framework가 데이터 액세스 레이어 역할을해야한다는 것이 었습니다.

+0

네 말이 맞아. 내 대답을 수정하여 내 의견을 반영하십시오. – Extrakun

0

은 직접 매핑 된 데이터 액세스 개체 인 일 수 있지만 꼭 그래야 할 필요는 없습니다. 그들은 프로젝트의 요구 사항과 수명에 따라 항상 더 나은 옵션이 될 백엔드 DAL을 통해 프록시가 될 수 있습니다.

큰 프로젝트에서 처리하는 경향은 내 Entity Framework 데이터 모델을 포함하는 Project.Entities이라는 별도의 네임 스페이스를 갖는 것입니다. 내 Project.Models은 엔티티를 데이터의 백업 스토어로 사용하고 해당 데이터를 조작하기위한 일반적인 방법 (필요한 경우)을 제공하는 모델을 포함합니다. 이를 수행하는 최선의 방법은 아니지만 유연성을 최대로 제공하고 데이터 모델을 더 많이 추상화 할 수있는 백업 저장소와 분리하여 보관해야합니다. 예를 들어 기본 데이터 계층을 항상 인 메모리 저장소, Entity Framework가 아닌 다른 DAL 또는 다른 작업으로 전환 할 수 있습니다.

더 작은/임시/테스트 프로젝트의 경우 Entity Framework 데이터 모델은 Project.Models으로 곧바로 사용되며 더 빠르며 많은 생각을 필요로하지 않으므로 직접 사용됩니다.

0

아니요, 모델은 데이터 액세스가 아닙니다. 모델은 데이터를 보관하는 클래스의 일종이며 일반적으로 할당 된 값이 허용되는지 확인하기위한 코드 이외의 코드를 포함하지 않습니다.

컨트롤러의 데이터에 액세스합니다. 어떤 방식 으로든 당신은 완전히 당신에게 달려 있으며 MVC는 걱정하지 않습니다.

1

귀하의 모델은 향후 데이터 액세스 전략과 관련이 없으므로 향후 DAL 전략을 변경할 수 있습니다.

DAL에서 모델을 제공해야하지만 모델을 생성하는 방법을 알지 않아야하며 모델에 특정 데이터베이스 코드가 없어야합니다.

내가 제안하는 접근 방식을 취한다면 DAL과 모델 클래스간에 데이터를 매핑하는 데 매우 유용한 도구 인 AutoMapper를 살펴보십시오.

0

모델은 도메인 모델이 아닌보기 모델입니다.

DAL 작업을 수행하려는 경우 컨트롤러에 삽입 할 수있는 저장소/서비스로 포장하는 경향이 있습니다.

이렇게하면 컨트롤러가 부풀어 오르는 것을 막을 수 있으며 또한 컨트롤러 테스트를 위해 DAL 레이어를 조롱 할 수 있습니다.

관련 문제