2012-11-25 2 views
22

동일한 목표를 가진 것처럼 보이는 두 패턴을 발견했습니다. 차이점은 무엇입니까? http://martinfowler.com/eaaCatalog/repository.html데이터 매퍼 패턴은 리포지토리 패턴과 어떻게 다릅니 까?

+1

데이터 매퍼가 너무 커서 개체를 실제로 매핑하는 것보다 많은 양의 쿼리를 처리하는 경우 파트를 쿼리하는 데 집중할 수있는 또 다른 클래스를 소개합니다.이 클래스는 리포지토리 패턴으로 이름을 지정합니다. – Rockstart

답변

37

질의 구조 코드 농축 매핑 층 위에 다른 층 추상화 [리포지토리이다]

http://martinfowler.com/eaaCatalog/dataMapper.html

.

DataMapper는 비즈니스 로직의 특성과에 대해 알 필요가 없다 울타리의 DB 측을 보장 데이터는 비즈니스 오브젝트에 의해 메모리에 보관하고 울타리의 비즈니스 측면하지 않는 방법 데이터가 저장되는 방법을 알아야합니다.

설명하기 위해 데이터가 행 집합으로 DB에 저장되어 있다고 가정합니다. 예를 들어 각 행은 상점의 항목을 나타냅니다. 메모리 측면에서는 해당 정보를 StoreItem의 목록으로 보관하지 않고 재고가있는 품목과 재고가없는 품목을위한 두 개의 목록으로 유지하고자 할 수 있습니다. 하나의 목록과 두 개의 목록 간의 전환을 처리하는 것은 DataMapper의 작업입니다.

울타리의 비즈니스 측면에서 다른 개체 및 상속 목록을 추가하여 복잡한 작업을 수행 할 수 있습니다. 'DataMapper'는 해당 표현을 관계형 DB로 변환해야합니다.

'저장소'는 비즈니스 측면에 "SELECT * FROM table WHERE 조건"기능을 제공합니다. 필터를 제공하면 해당 필터와 일치하는 개체 컬렉션이 반환됩니다.

요약하면 'DataMapper'는 단일 개체를 다루며 '저장소'는 개체 컬렉션을 다루며 'DataMapper'에서 제공하는 기능을 확장합니다.

+0

좋은 설명, 어떻게 다를 수 있는지 보여줄 수 있습니까? Java, .NET 및 PHP 프레임 워크에서 볼 수 있듯이이 두 개념은 서로 혼용되어 사용되는 것처럼 보이며 매우 혼란 스럽습니다. –

+1

@LordYggdrasill 특정 프레임 워크에 특정 문제가있는 경우이 사이트의 질문 형식으로 제시해야합니다. 쿼리 및 매핑은 논리적으로 다른 작업이지만 구현 *은 종종 긴밀하게 결합되어 일부 (인용 필요)가 함께 고려하도록 선택할 수있는 이유를 설명 할 수 있습니다. – Andrei

+0

여기 ASP.NET 웹 사이트의 예제가 있습니다. 보시다시피, 리포지토리 패턴 구현은 POEAA의 Martin Fowler의 Data Mapper와 똑같습니다. 이 현상을 설명하는 방법을 알고 있습니까? 어쩌면 ASP.NET의 저장소가 실제로 데이터 매퍼입니까? http://www.asp.net/mvc/overview/older-versions/getting-started-with-ef-5-using-mvc-4/implementing-the-repository-and-unit-of-work-patterns- in-an-asp-net-mvc-application –

관련 문제