0

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

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

我不想在每次调用 ListXYZ 方法时都传递这个限制,因为它会导致很多重载方法。理想情况下,我希望能够像以前一样访问存储库,但应用了限制。就像是:

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

任何建议我应该怎么做?还是我让自己太复杂了?

4

1 回答 1

0

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

var rep = new Repository<Product>();
var specification = new MarketSpecification("xy") && new CategorySpecification("shirts");
var list = rep.Find(specification);
于 2009-07-09T19:30:47.490 回答