리포지토리 대 DAL의 서비스 패턴 : EF 및 Dapper

asp.net-mvc dapper design-patterns entity-framework

문제

저는 프로젝트에서 일하고 있는데 DAL을 디자인해야합니다. 필자는 대부분의 프로젝트에서 Entity Framework 를 사용하고 성능에 민감한 일부 영역에서는 Dapper 사용할 것입니다.

저장소 패턴을 사용하려고 생각했지만 EF는 이미이 패턴을 어떤 의미에서 구현했습니다. Dapper의 경우는 그렇지 않습니다. 그런 다음 DAL에 저장소 및 서비스 패턴을 혼합하는 것이 효과적일까요? 아니면 이것이 비즈니스 로직 레이어로 넘어가겠습니까?

내가 생각한 구조의 예제 :

MyProjectName.Main
    Views/
    Controllers/
    Infrastructure/
    ...
MyProjectName.DAL
    DataService.EF/
        fileName.cs
        ...
    DataService.Dapper/
        fileName.cs
        ...

수락 된 답변

EF 또는 다른 ORM은 저장소를 구현하지 않습니다. 저장소는 도메인을 지속성과 분리시키는 것을 의미합니다. 도메인은 도메인 객체, EF / Nhibernate / Dapper 등에서 작동 하며 관계형 데이터베이스OOP 뷰 를 나타내는 지속성 엔티티와 함께 ​​작동 합니다 .

차이점을 보시겠습니까? 하나는 비즈니스 객체가 필요하고, 다른 하나는 데이터 구조를 처리해야합니다. 그들은 유사하지만 동일하지 않습니다. 도메인 모델 개념, 동작 및 사용 사례, 지속성 (Persistence)은 데이터를 저장하여 신속하게 검색 할 수 있도록합니다. 다른 책임. 리파지토리는 그들 사이의 중개자 역할을 수행하며, 영속 구조와 부제에있는 도메인 객체를 "변환"합니다.

항상 ORM은 저장소의 구현 세부 사항입니다. CRUD 앱의 경우 도메인이 없으므로 db와 직접적으로 관련됩니다 (즉, 마이크로) ORM. 이 경우 Repo는 데이터 액세스에 비즈니스 의미를 부여하기위한 외관으로 만 의미가 있습니다 ( GetOrders 는 전체 Linq 또는 5 행 SQL이 3 개의 테이블을 결합한다는 것을 훨씬 쉽게 이해할 수 있습니다).

리포지토리 인터페이스는 필요한 곳에서 정의되지만 지속성 (DAL)에서 구현됩니다. 서비스와 마찬가지로 DAL에서 구현 될 수있는 동안 (인터페이스로) 도메인에서 정의 될 수 있습니다. 리포지토리 구현은 거의 항상 DAL의 일부이지만 일부 서비스는 DAL에 있습니다. 왜냐하면 단순히 리포지토리를 구현하는 것이 그만큼 쉬운 이유 일뿐입니다. 다른 서비스는 저장소 (일반적으로 생성자를 통해 주입 됨)를 직접 사용할 수 있으며 DAL을 만지지 않습니다.

어떤 패턴을 사용 하든지 실제로 목적을 이해하고 항상 디커플링에 대해 생각하십시오.


인기 답변

Bradley Braithwaite 가 만든 EF + Dapper 하이브리드 구현 을 확인하십시오.

GitHub 레포 : https://github.com/bbraithwaite/HybridOrm

동반 블로그 포스트 : ORMs : 바퀴를 재발견하지 마십시오 .

"출혈"을 피하기 위해 프로젝트 계층을 구조화하는 측면에서, 그가 어떻게했는지 여기에 있습니다.

프로젝트 레이아웃

블로그 포스트 : Dapper를 사용하여 데이터 저장소 만들기



아래 라이선스: CC-BY-SA with attribution
와 제휴하지 않음 Stack Overflow
이 KB는 합법적입니까? 예, 이유를 알아보십시오.
아래 라이선스: CC-BY-SA with attribution
와 제휴하지 않음 Stack Overflow
이 KB는 합법적입니까? 예, 이유를 알아보십시오.