2011-09-07 3 views
2

우리는 유창한 nhibernate를 사용하고있는 엔터티에 대한 리포지토리에 대한 쿼리를 수행하는 프로젝트에서 작업하고 있습니다. 종종 우리는 다음과 같이 쿼리를 작성 :linq가 질의에서 비즈니스 로직 재사용을 nhibernate하기 위해

(from person in repository.Query<Person>() 
where person.Age > 18 
where person.Age < 50 
select person).Single(); 

분명히 우리는 여기에 몇 가지 논리를 가지고 우리는 어딘가에 분별을 캡슐화 할 수 있도록하고 싶습니다. 이상적인 해결책은 이렇게하는 것입니다 :

(from person in repository.Query<Person>() 
where personIsTheRightAge(person) 
select person).Single(); 

bool personIsTheRightAge(Person person) 
{ 
    return person.Age > 18 && person.Age < 50; 
} 

그러나 nhibernate는 이것을 어떻게 처리해야할지 모릅니다.

IQueryable < Person에 확장 방법을 제공 할 수 있지만 드라이버 Person이있는 자동차 엔티티를 쿼리 할 때 작동하지 않으며 동일한 논리를 다시 사용해야합니다.

누군가 프로젝트에서 반복적으로 사용하기 쉬운 방식으로이 문제를 해결하는 방법에 대한 좋은 아이디어가 있는지 궁금합니다.

미리 도움을 청하십시오.

답변

0

당신은 '권리 세'로직을 캡슐화하는 DDD Specification 같은 것을 사용할 수 있습니다 :

usersRepository.FindByAgeSpec(RightAgeSpecification rightAge); 

Boolean isRightAge = car.Driver.IsSatisfiedBy(rightAge); 

당신은 또한 흥미 저장소가 implemented in DDD을 어떻게보고 찾을 수 있습니다.