Ограничение результатов из хранилища - PullRequest
0 голосов
/ 09 июля 2009

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

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

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

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

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

1 Ответ

0 голосов
/ 09 июля 2009

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

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