存储库和规范模式

Luh*_*ann 6 .net c# repository specification-pattern

我目前正在建立一个新项目,我遇到了一些问题,我需要一点点输入.

这就是我在考虑的问题:

  • 我想要一个通用的存储库

  • 我不想从我的存储库返回IQueryable.

  • 我想将我的查询封装在规范中.

  • 我已经实现了规范模式

  • 它需要易于测试

现在这是我陷入困境的地方,我的问题是哪种方式是使用一个或多个规范调用find方法的最优雅方式:

(流利): bannerRepository.Find().IsAvailableForFrontend().IsSmallMediaBanner()

或者用我的规范将查询表达为lambdas

(波长): bannerRepository.Find.Where(banner => banner.IsFrontendCampaignBanner && banner.IsSmallMediaBanner)

或者可能是其他一些方式?最重要的是,实现MVC前端的人应该具有良好的存储库直观体验.

我希望实现的是保持som灵活性,以便能够结合规范,并提供"过滤"的经验与规范,但不会泄漏IQueryable到控制器,但更像是一个ISpecifiable,只允许使用规范而不是Linq修改查询.但我是否只是以这种方式将查询逻辑泄漏给控制器?

Dav*_*Lay 2

我见过一些使用 Properties 进行规范的 Fluent API,因此它们不会向客户端添加括号噪音。

bannerRepository.Find.IsAvailableForFrontend.IsSmallMediaBanner.Exec()
Run Code Online (Sandbox Code Playgroud)

Exec() 是一种针对存储库执行规范的方法。

但即使你不使用这些属性,我也会选择流畅的 API,因为它的噪音最小。