【发布时间】:2011-01-14 08:26:24
【问题描述】:
我目前正在建立一个新项目,我遇到了一些事情,我需要一些意见。
这是我正在考虑的:
我想要一个通用存储库
我不想从我的存储库中返回 IQueryable。
我想将我的查询封装在规范中。
我已经实现了规范模式
它需要易于测试
现在这是我有点卡住的地方,我的问题是哪种方式是使用一个或多个规范调用 find 方法的最优雅方式:
(流利):bannerRepository.Find().IsAvailableForFrontend().IsSmallMediaBanner()
或者用我的规范将查询表达为 lambdas
(Lambda):bannerRepository.Find.Where(banner => banner.IsFrontendCampaignBanner && banner.IsSmallMediaBanner)
或者完全是其他方式?最重要的是,实现 MVC 前端的人应该对存储库有良好的直观体验。
我希望实现的是在能够组合规范方面保持一定的灵活性,并提供与规范“过滤”的体验,但不会将 IQueryable 泄漏给控制器,但更像是 ISpecifiable,只允许使用规范而不是 Linq 修改查询。但是我只是回到以这种方式将查询逻辑泄漏给控制器吗?
【问题讨论】:
标签: c# .net repository specification-pattern