2010-07-18 3 views
0

나는 모든 종류의 데이터 소스에 적응해야하는 저장소가 있습니다.
여기에는 특정 유형의 웹 서비스, 데이터베이스 (ActiveRecord 및 NHibernate 사용) 및 플랫 파일까지 포함됩니다.
ActiveRecord의 경우 EnumerateQuery(IActiveRecordQuery query)은 내가 필요하지만 인터페이스가 문서화되어 있지 않은 것처럼 IEnumerable을 반환합니다.
정확히 무엇을합니까? 어떻게 사용합니까?
Fetch() 함수를 확장하여 다른 데이터 소스를 수용 할 수 있습니까?
다른 데이터 소스를 받아들이려면 고유 한 클래스로 래핑 할 수 있습니까?데이터 소스에 대한 가져 오기() 함수 일반화

답변

1

대신 IQueryable을 추상화로 사용합니다. IRepository가 IQueryable을 구현하도록 만든 다음 ActiveRecord 저장소가 Castle.ActiveRecord.Linq에 위임하고, 플랫 파일 저장소가 LINQ to XML 등을 사용하여 구현됩니다.

+0

DetachedCriteria는 어떻습니까? –

+0

@the_drow : 추상화에 DetachedCriteria를 노출하면 NHibernate에 이미 바인딩되어 있으며 실제로는 새어 난 추상화입니다. 리포지토리 데이터 소스 독립적으로 만들려면 IQueryable이 필요합니다. 이것이 바로 구축 된 것입니다. –

+0

예, 문제는 내 쿼리가 이미 DetachedCriteria로 작성된 것입니다. 이러한 목적으로 제네릭을 사용해야합니까? –

관련 문제