2009-12-21 6 views

답변

1

실제 질문은 다음과 같습니다. 데이터 소스를 쿼리 (및 열거 가능)하는 방법에 대한 책임은 쿼리 개체에 속합니까?

답변은 여러 프레임 워크/솔루션간에 변경 될 수 있지만 적어도 쿼리 개체는 원하는 데이터의 사양을 나타내야합니다. 그것이 주요 책임입니다.

사용할 수있는 데이터 API를 통해 DB를 다루는 방법을 알지 못한다. 대신 사용되는 백업 저장소에 쿼리 개체를 매핑하는 방법을 이해하는 서비스/구성 요소가 활용해야한다.

이 방법을 사용하면 동일한 쿼리 개체로 다른 데이터 소스를 활용할 수있을뿐 아니라 클라이언트가 쿼리 사양 개체를 만들어 서버에 전달할 수 있습니다 (매개 변수가 많은 서버 방법보다 더 나은 솔루션 일 수 있음).

(원시 SQL에서 Hibernate로) 데이터 액세스 메커니즘을 변경 한 경우 쿼리 개체를 변경하면이 방식으로 변경해야합니다 (잠재적으로 많은 다른 쿼리 개체가있을 수 있음) - 매핑 작업을 담당하는 개체 실제 쿼리에 대한 쿼리 개체를 변경해야합니다

2

다른 사람이 쿼리를 실행해야합니다.

SRP을 위반하지 않으면 검색어가 검색어 사양과 검색어 실행을 모두 캡슐화하고 있습니다.

예를 들어 LINQ-to-SQL에서 어떻게 수행되었는지 생각해보십시오. LINQ-to-SQL에서 식 트리를 쿼리 사양으로 생각할 수 있으며 식 트리를 해석하고이를 SQL로 변환하는 것은 LINQ-to-SQL 공급자의 몫입니다.

여기에 있어야합니다. 쿼리 개체에서도 쿼리를 실행하면 쿼리 사양을 쿼리를 실행중인 위치와 연결합니다. 오히려 조회 오브젝트가 다른 A 텍스트 (데이터베이스 조회, 메모리 내 콜렉션 조회 등)에서 재사용 될 수 있도록 분리되어야합니다. 다시 말하지만, 이것이 LINQ에있는 방법입니다. 표현식 트리는 LINQ-to-SQL, LINQ- 개체 및 LINQ-to-XML에서 변경없이 사용할 수 있습니다.

+0

나는 비슷한 생각했다.하지만 Ayendes 기사는 나를 혼란스럽게했다. http://ayende.com/Blog/archive/2007/03/29/Query-Objects-vs.-Methods- On-The-Repository.aspx 그는 그의 쿼리 개체에서 find 메서드를 사용하고 있습니다. – user137348

관련 문제