限制存储库的结果

时间:2009-07-09 08:46:03

标签: c# nhibernate repository-pattern

我有一个非常标准的Repository模式,其中存储库在构造时被注入我的MVC控制器。存储库每个AppDomain初始化一次,并由其他控制器共享。存储库使用NHibernate ISessions和ICriteria访问数据库,但使用ListXYZ方法公开访问,而不是直接接受ICriteria。

我现在需要一种巧妙的方法来限制在certian案例中返回的结果,例如,可以列出给定市场中的所有产品,只有在调用某个操作时才知道。

我不希望在每次调用ListXYZ方法时都传递此限制,因为它会导致大量重载方法。理想情况下,我希望能够像以前一样访问存储库但是应用了限制。类似的东西:

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

任何建议我该如何做?还是我让自己变得太复杂了?

1 个答案:

答案 0 :(得分:0)

您可以尝试使用specification pattern。你以不同的方式使用2个限制(规范)有点奇怪。 我会做的

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