2011-07-05 6 views
4

세 가지 아키텍처 프로그램이 있습니다. 질문은 다음과 같습니다.
1. 데이터 액세스는 EF 계층입니까?
2. 프레젠테이션 계층에서 EF로 생성 된 엔티티를 사용하려는 경우 데이터 액세스를 참조하지만 3 계층 아키텍처의 원칙을 위반합니다.엔티티 프레임 워크 및 3 계층 아키텍처

+1

프리젠 테이션 레이어 또는 모델 정의 (클래스)를 요청하는 처리기 프로젝트 (논리)에서 EF 모델을 참조하면 데이터 액세스가 데이터 레이어에 남아 있으므로 걱정할 필요가 없습니다. ! – euther

답변

1

예 EF가 데이터 액세스 레이어가됩니다. EF를 사용하면 POCO 지원과 함께 T4 템플릿을 사용할 수 있습니다. 그런 다음 이러한 POCO를 별도의 dll로 추출하면 모든 계층의 참조가됩니다.

+0

+1 POCO를 사용하면 아키텍처의 무결성을 유지하는 데 필요한 수준의 추상화를 제공합니다. 증거? 데이터 액세스 구현을 대체 할 수 있지만 데이터 계약으로 POCO를 유지할 수 있습니다. –

1

어떤 유형의 응용 프로그램을 제작하고 있습니까? ASP.NET MVC 3 애플리케이션을 구현하는 경우 View를 프리젠 테이션 레이어로 만들 수 있습니다. 모델은 데이터 액세스 (EF를 사용할 수 있음)이고 컨트롤러 및/또는 액션 필터는 비즈니스 로직을 포함 할 수 있습니다. 시나리오에서는 프리젠 테이션 레이어에서 EF 모델을 사용하지만 여전히 관심 원칙의 원칙을 충족시킵니다.

1) 당신을 위해 도메인 모델 (옵션을 생성하지만, 일반적으로 사용되는) 2) 당신에게/쿼리 해당 도메인 모델을 통해 데이터베이스를 수정할 수있는 기능을 제공합니다 : -

+0

나는 netTcpBinding을 사용하여 wcf 서비스를 빌드하지만 그 아키텍처는 provie 웹 서비스 소프트웨어 팩토리를 사용합니다. 내 서비스 구현이나 프레젠테이션 레이어의 다른 응용 프로그램에서 데이터 액세스를 참조 할 경우 아키텍처에 오류가 발생하지 않습니까? – croisharp

+0

모든 추상화 모델의 핵심 목표는 종속성을 제한하는 것입니다. 따라서 ServiceContract에 SQL 문이 있으면 데이터 구현에 서비스 구현이 너무 의존적이라고 말할 수 있습니다. EF는 그 자체로 추상화를 제공합니다. 제가 여러분에게 제안하고자하는 것은 여러분의 EF 컨텍스트로부터 서비스를 추상화하는 저장소 클래스를 만드는 것입니다. 질문에 대답하고 있습니까? –

+0

물론, 나는 Delete, Edit, GetById, GetAll, Add 메서드를 수행하는 Manager를 사용하여 추상화를 수행했지만, 비즈니스 로직은 Customer, Producer ...와 같이 생성 된 엔티티를 의미합니다. – croisharp

1

EF 두 가지를 수행합니다.

이렇게하면 도메인 모델과 데이터 액세스간에 선이 흐리게 표시 될 수 있지만 실제로는 별개입니다.

오브젝트 컨텍스트를 작성하고 프리젠 테이션에 직접 작성하는 것과 같은 일을하지 않는 한, 추상화를 깨뜨리는 것이 아닙니다. 참조 할 필요가있는 것은 "깨뜨리는"유일한 것입니다. System.Data.Objects (또는 EF dll이 무엇이든) 프리젠 테이션 프로젝트 (실제 아티팩트 임)에서 Jethro가 제안한 경로를 거치지 않고 도메인 모델을 별도의 프로젝트로 생성하지 않는 한.

2

마이크로 소프트 스페인 코드 플렉스에 N 계층 응용 프로그램을위한 아주 좋은 문서, 가이드 및 샘플 응용 프로그램을 출시, 당신은 여기를 찾아 볼 수 있습니다 :

http://microsoftnlayerapp.codeplex.com/

당신은 여러 방향 거기에 도움이 구현 패턴을 발견 할 것이다 .

hth.

0

3 단계 아키텍처의 경우. 프리젠 테이션 레이어에서 직접 EF를 수행하는 대신 도메인 모델 및 데이터 모델 패턴을 사용하여 추상화를 수행하는 것이 좋습니다.

그래서 다양한 CRUD에 대해 이러한 클래스에 액세스하는 방법을 알고있는 저장소가있는 EF POCO 클래스가있는 데이터 모델을 가지고 있다는 생각이 들었습니다.

도메인 모델에는 클라이언트와 관련된 모델이 있으므로 (다양한 ViewModels 또는 유효성 검사 관련 코드를 넣을 수 있음) WPF 또는 MVC 웹 응용 프로그램이 될 수 있습니다. 이 두 가지 사이에는 도메인 및 데이터 모델 모두와 대화하는 비즈니스가 있습니다.

Presentation Layer는 EF/Data Layer/Repository에 대해 아무 것도 모릅니다. 새로운 데이터 프레임 워크 나 데이터베이스를 도입하려면 새로운 저장소 클래스와 데이터 모델 클래스를 작성하면됩니다.

이렇게하면 코드를 단위 테스트 할 수 있습니다.