2011-09-07 105 views
2

我工作的一個項目,我們正在使用流利的NHibernate和對我們的實體倉庫執行查詢的NHibernate重用的業務邏輯。我們經常編寫查詢這樣的:LINQ在查詢

(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>但是如果我查詢具有驅動程序的Car實體Person並且我需要重用相同的邏輯,那麼這將不起作用。

我只是想知道如果任何人有如何的方式,很容易在一個項目重複使用解決這個問題,一些不錯的想法。

在此先感謝您的幫助。

回答

0

您可以使用類似DDD Specification封裝「適齡」的邏輯:

usersRepository.FindByAgeSpec(RightAgeSpecification rightAge); 

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

您可能還覺得很有意思看看倉庫是如何implemented in DDD