리포지토리 패턴 및 DAL 객체 생성


9

내가 배운 한 IRepository에는 CRUD. 그리고 우리는 이것을 상속 IRepository과 같은 우리의 다른 인터페이스에 IProduct구현할 IProduct구체적인 클래스 ProductRepository와 같은 방법과를, GetAllProducts(), Top5Products().

n- 계층 아키텍처에서도 동일한 작업을 수행 할 수 있습니다. 같은, 생성 DAL Class Library과에서 클래스 정의 Product와 같은 방법과를 GetAllProducts(), Top5Products().

모두 DAL.ProductRepo.ProductRepository우리는 초기화 클래스 DB ContextEntity Framework우리의 관련 데이터를 쿼리합니다.

호출은 둘 다 Repo.ProductRepository또는 DAL.Product방법에서 비슷 합니다.BLL

이러한 유사점을 고려할 때 Repos의 이점은 무엇입니까? 내가 함께 n 계층 아키텍처를 사용하여 매우 쉽게 같은 작업을 수행 할 수 있습니다 ( Controller, BLL Class Library, DAL Class Library).


@Neil OP는 DAL에 익숙하고 저장소가 동일한 작업을 수행하기위한 다른 인터페이스인지 아니면 더 많은 인터페이스인지 묻습니다.
Christophe

@Christophe 정확히, 나는 이것에 혼란 스러워요. DAL에서 똑같이 할 수 있다면 왜 repo 패턴을 사용합니까?
M. Arslan

답변:


7

내 이해는 :

  • DAL (데이터 액세스 계층)은 지속성 기술과 응용 프로그램 논리 사이에있는 소프트웨어 의 계층 을 나타냅니다 . 그 목적은 데이터 액세스 문제를 나머지 응용 프로그램 문제와 별도로 유지하는 것입니다. 그것은이다 일반적 개념.

  • 리포지토리 는 DDD (Domain Driven Design)의 개념입니다.

DDD에서 리포지토리 는 지정된 Aggregate에 대한 모든 데이터 액세스 문제를 캡슐화해야합니다 . 여기에는 집계를 읽고 쓰는 동안 일관성을 유지해야 할 책임이 있습니다. 그리고 집계 관련 엔티티 (예를 들어, 그룹화 한 것입니다 Product, Store등).

따라서 리포지토리는 집계의 지속성 및 일관성 문제를 구체적으로 인식합니다. 귀하의 일반 DAL은 특정 리포지토리 로 구성 될 가능성이 높습니다

TL; DR;

  • DAL 은 데이터 액세스 문제를 추상화하기위한 일반적인 용어입니다.
  • 리포지토리 는 DDD의 유사하지만보다 구체적인 개념입니다.
  • DAL은 여러 리포지토리로 구성 될 수 있습니다.

4
리포지토리 데이터베이스 레코드를 미러링하는 메모리 내 개체 컬렉션 을 의미하기 위해 DDD 외부에서보다 일반적으로 사용되는 용어입니다 . 이와 관련하여 DAL과 Business Logic Layer 사이에 위치 합니다. martinfowler.com/eaaCatalog/repository.html
Robert Harvey

왜 모든 사람이 모든 것에 대해 DDD 크레딧을 주려고 노력합니까?!
TheCatWhisperer

1
오늘 나는 배웠다 : P
MetaFight

2

서로 다른 두 가지 보완 개념을 비교하고 있습니다.

  • 데이터 액세스 계층은 데이터에 대한 추상적 액세스 계획 건축 계층입니다. 액세스가 어떻게 추상화되는지는 말하지 않습니다.
  • 리포지토리 DAL (끝에 패턴의 목록이 표시에 속하는 특정 패턴 이 링크 ). 데이터 저장소에 대한 인터페이스와 같은 컬렉션을 제공하여 데이터에 대한 특정 액세스를 추상화하는 방법을 정확하게 설명합니다.

귀하의 예에서 DAL

흥미롭게도 클래스 라이브러리의 예 DAL.Product에서 저장소 인 것 같습니다. 따라서 실제로 차이를 보지 않는 것이 일반적입니다. 구현 관점에서는 동일합니다 (이 특정 경우).
그러나 그럴 필요는 없습니다. DAL은 다음과 같이 다르게 구현 될 수 있습니다.

저장소와 다른 점

저장소의 개념은 아키텍처 모델 및 구현과 무관합니다. 레이어 나 데이터베이스를 생각할 필요가 없습니다. 도메인을 디자인 할 때 알아야 할 것은 개체가 리포지토리에 있고 특별한 종류의 컬렉션 마녀가 지속성을 제공한다는 것입니다. 따라서 도메인 디자인에 매우 적합하며 도메인 기반 디자인 의 핵심 요소 인 이유를 설명합니다 .

DDD에서 리포지토리에는 고려해야 할 규칙이 더 있습니다. 즉, 집계 (독립 엔터티 또는 집계 루트에 종속 된 관련 엔터티 그룹)에 대한 액세스 권한을 부여하고 집계마다 단일 리포지토리가 있습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.