2013-02-08 7 views
0

많은 리포지토리 패턴 질문이 있지만 나는 누군가가 내가 어떤 원칙을 이해할 수 있도록 친절하게되기를 바랍니다.리포지토리 패턴 - 컨텍스트 및 데이터 매핑

항상 컨텍스트를 사용하여 저장소 클래스 생성자를 볼 수 있으며이 컨텍스트는 종종 EF 또는 NHibernate입니다. 그 다음에 CRUD 메소드에 dbset<T>을 사용하기 쉽습니다. 이후 API 호출을 통해 non-sql 데이터 소스에 대한 호출을 수행하기 때문에 Repository<T>을 사용하는 방법과 T GetById(int id)과 같은 메소드를 알아낼 수 없다는 것을 알고있는 기본 컨텍스트가없는 경우 <T>을 오른쪽으로 번역하십시오. 사용자 정의 컨텍스트와 자체 데이터 매핑을 만들어야합니까? 내가 가지고있는 모든 수업에 대해 특정 저장소를 갖게 될까요? 어쨌든, 어딘가에, 나는 그걸 <T>에 가져와 그것을 생성하고 속성을 채우기 위해 무엇이 필요한지 알아야합니다.

나는 리포지토리 패턴이 파일과 함께 사용되는 몇 가지 예제를 보았으며 각 유형에는 호출 및 매핑이 수행되는 자체 리포지토리가있는 것처럼 보입니다.

여러 데이터 소스를 대상으로하는 리포지토리 패턴의 예는 무엇입니까?

+0

일반 저장소를 만들어야한다고 말하는 것은 없습니다. 당신은 당신의 경우에 특정한 것을 만드는 것이 더 낫습니다. – jgauffin

답변

0

리포지토리 패턴은 하나 이상의 데이터 원본과 독립적 인 개념으로, 관련된 모든 지속성을 추상화하는 것이 목적 중 하나입니다. 두 개 이상의 지속성 유형이 사용되는 저장소 구현 예제가 필요하다고 생각합니다. 리포지토리 (리포팅)가 EF와는 아무런 관련이없는 클래스 일 때 매우 쉽습니다.

사실 실제로 본 대부분의 예제는 Db 또는 NH 컨텍스트를 다른 것없이 래핑하기 때문에 '잘못된 것'입니다. 아무 것도하지 않습니다.

요점은 저장소가 필요한 모든 데이터 소스를 사용한다는 점입니다. 하나만 (대부분의 경우) 또는 2-3 일 수 있습니다. 파일이 업로드되고 파일 시스템에 파일을 저장하거나 (클라우드로 보내겠습니까?) 일부 메타 데이터를 로컬 db.

리포지토리는 로컬 DB와 대화하기 위해 DAO (EF 컨텍스트)와 종속성을 가지며 파일 시스템에 직접 액세스합니다. 파일을 클라우드에 업로드하는 경우 리포지토리는 클라우드 공급자에 종속됩니다.

여기에는 복잡한 것이 없습니다. 저장소는 db와 cloud를 사용하여 나머지 응용 프로그램에서 숨길 수 있습니다. 앱은 어디서 어떻게 파일을 저장할지 신경 쓰지 않습니다. 따라서 Repository 클래스를 작성할 때 계약 (인터페이스)을 존중하는 한 원하는 모든 작업을 수행 할 수 있습니다.

+0

감사합니다. 마이크. 나는 동의한다. 내가 가진 문제는 형식 T의 개체를 만들고 데이터 원본에 대한 호출이 반환 된 채로 채워진 속성을 반환하는 방법을 모르는 것입니다. 내 저장소에서 T GetById (int id) 메소드를 가졌으므로, 무엇 때문에 호출해야하는지, 그리고 일반적인 경우 이후에있을 수있는 경우 어떻게 채워야 하는지를 알고 있어야합니다 ... 죄송합니다. lost ... – jbrabant

+0

클래스 당 하나의 리포지토리가있는 경우에만 작업중인 개체가 무엇인지 알 수 있으므로 데이터 원본에 대한 올바른 호출을 실행하고 올바른 형식을 반환합니다. 아니? – jbrabant

+0

일반 저장소는 잊어 버리십시오. 엔티티가 직렬화되어 저장 될 때 집계 루트 저장소에 대해서만 사용하고 있습니다. 둘 이상의 데이터 소스를 다룰 때 적합하다고 생각하지 않습니다. – MikeSW