가능한 중복은 :
Where to write Database and Business logic in MVC?MVC3 아키텍처에서 DAL 레이어가 필요하지 않습니까?
난 그냥 MVC3 패턴으로 시작했습니다. MVC3에서 데이터 액세스는 어떻게합니까? 'MODEL'을 데이터 액세스 레이어로 만들거나 'DAL'레이어를 추가하고 'MODEL'레이어에서 불러 옵니까?
가능한 중복은 :
Where to write Database and Business logic in MVC?MVC3 아키텍처에서 DAL 레이어가 필요하지 않습니까?
난 그냥 MVC3 패턴으로 시작했습니다. MVC3에서 데이터 액세스는 어떻게합니까? 'MODEL'을 데이터 액세스 레이어로 만들거나 'DAL'레이어를 추가하고 'MODEL'레이어에서 불러 옵니까?
마지막 MVC3 프로젝트에서 작업 할 때 GeekDinner와 같은 다양한 샘플에서 데이터를 이해하기 위해서는 Entity Framework가 데이터 액세스 레이어 역할을해야한다는 것이 었습니다.
네 말이 맞아. 내 대답을 수정하여 내 의견을 반영하십시오. – Extrakun
은 직접 매핑 된 데이터 액세스 개체 인 일 수 있지만 꼭 그래야 할 필요는 없습니다. 그들은 프로젝트의 요구 사항과 수명에 따라 항상 더 나은 옵션이 될 백엔드 DAL을 통해 프록시가 될 수 있습니다.
큰 프로젝트에서 처리하는 경향은 내 Entity Framework 데이터 모델을 포함하는 Project.Entities
이라는 별도의 네임 스페이스를 갖는 것입니다. 내 Project.Models
은 엔티티를 데이터의 백업 스토어로 사용하고 해당 데이터를 조작하기위한 일반적인 방법 (필요한 경우)을 제공하는 모델을 포함합니다. 이를 수행하는 최선의 방법은 아니지만 유연성을 최대로 제공하고 데이터 모델을 더 많이 추상화 할 수있는 백업 저장소와 분리하여 보관해야합니다. 예를 들어 기본 데이터 계층을 항상 인 메모리 저장소, Entity Framework가 아닌 다른 DAL 또는 다른 작업으로 전환 할 수 있습니다.
더 작은/임시/테스트 프로젝트의 경우 Entity Framework 데이터 모델은 Project.Models
으로 곧바로 사용되며 더 빠르며 많은 생각을 필요로하지 않으므로 직접 사용됩니다.
아니요, 모델은 데이터 액세스가 아닙니다. 모델은 데이터를 보관하는 클래스의 일종이며 일반적으로 할당 된 값이 허용되는지 확인하기위한 코드 이외의 코드를 포함하지 않습니다.
컨트롤러의 데이터에 액세스합니다. 어떤 방식 으로든 당신은 완전히 당신에게 달려 있으며 MVC는 걱정하지 않습니다.
귀하의 모델은 향후 데이터 액세스 전략과 관련이 없으므로 향후 DAL 전략을 변경할 수 있습니다.
DAL에서 모델을 제공해야하지만 모델을 생성하는 방법을 알지 않아야하며 모델에 특정 데이터베이스 코드가 없어야합니다.
내가 제안하는 접근 방식을 취한다면 DAL과 모델 클래스간에 데이터를 매핑하는 데 매우 유용한 도구 인 AutoMapper를 살펴보십시오.
모델은 도메인 모델이 아닌보기 모델입니다.
DAL 작업을 수행하려는 경우 컨트롤러에 삽입 할 수있는 저장소/서비스로 포장하는 경향이 있습니다.
이렇게하면 컨트롤러가 부풀어 오르는 것을 막을 수 있으며 또한 컨트롤러 테스트를 위해 DAL 레이어를 조롱 할 수 있습니다.
이것은 여러 번, 여러 번, 여러 번 요청되었습니다. –
질문은 우리의 응용 프로그램에 더 많은 유연성이 필요합니까 ?? 대답은 그렇습니다!이 게시물에 우리의 공헌에 의해 제안 된 예제가 많이 있습니다, 당신의 시스템에서 DAL을 원할 때, Db와 어플리케이션 로직으로 트랜잭션을 분리하고 싶습니다. 그래서 두 개 중 하나가 모든 상층부에 직면 해 있거나 변경이있을 경우 DBContext 클래스와 애플리케이션 사이의 DB 또는 애플리케이션, 레이어, 인터페이스 또는 추상 클래스를 방해하지 않아도됩니다. –