2009-07-09 5 views
0

У меня довольно стандартный шаблон хранилища, в котором хранилища вводятся в мой контроллер MVC при построении. Репозитории инициализируются один раз на AppDomain и совместно используются другими контроллерами. Хранилища получают доступ к базе данных с помощью NHibernate ISessions и ICriteria, но доступ открыт с использованием методов ListXYZ вместо того, чтобы напрямую принимать ICriteria.Ограничение результатов из репозитория

Теперь мне нужен аккуратный способ ограничить результаты, возвращаемые в случаях certian, например, перечисление всех продуктов на данном рынке, известных только при вызове действия.

Я не хочу передавать это ограничение при каждом вызове метода ListXYZ, поскольку это приведет к множеству перегруженных методов. В идеале я хотел бы иметь доступ к репозиторию, как раньше, но с применяемыми ограничениями. Что-то вроде:

var rep = new ProductRepository().ApplyRestriction(new MarketRestriction("xy")); 
var list = rep.ListInCategory("shirts"); 

Любые предложения Как мне это сделать? Или я делаю это слишком сложным для себя?

ответ

0

Вы можете попробовать specification pattern для этого. Немного странно, что вы используете 2 ограничения (спецификации) по-другому. Я бы сделал

var rep = new Repository<Product>(); 
var specification = new MarketSpecification("xy") && new CategorySpecification("shirts"); 
var list = rep.Find(specification); 
+0

Спасибо, я долго избегал этого, потому что я думал, что это будет слишком сложно реализовать. Но как только я добрался до него, это не показалось мне слишком плохим, и он работает очень хорошо. – kaa

Смежные вопросы