SuperAPI AI 工具集

dotnet-specification-pattern

编程与开发

查看项目

更新于 10-16 02:22

技能介绍

用途

该技能用于在 .NET 项目中实现 Specification(规约)模式,将查询逻辑从仓储或处理器中抽离出来,封装为独立、可复用的规约对象。其核心目标是让查询条件具备可复用性、可组合性、可测试性和类型安全性。

主要能力

  • 可复用条件:一次定义,多处使用。
  • 可组合:可通过 And/Or 组合规约。
  • 可测试:查询逻辑可独立测试。
  • 类型安全:编译期检查。

技能提供以下组件模板:

  • ISpecification<T>:基础规约接口,定义 Criteria、Includes、IncludeStrings、OrderBy、OrderByDescending、Take、Skip、IsPagingEnabled 等成员。
  • BaseSpecification<T>:抽象实现,提供 AddCriteria、AddInclude、ApplyOrderBy、ApplyOrderByDescending、ApplyPaging 等受保护方法。
  • 具体规约示例:如 Active{Entities}Specification、{Entities}ByOrganizationSpecification、{Entity}ByIdSpecification、Paged{Entities}Specification,展示条件、Include、排序与分页的写法。
  • SpecificationEvaluator:静态求值器,将规约应用到 IQueryable,依次处理 Criteria、Includes、IncludeStrings、排序和分页。
  • 仓储集成模板:在仓储中提供 GetAsync、GetFirstOrDefaultAsync、CountAsync 方法,接收 ISpecification<T> 并调用 SpecificationEvaluator。
  • 处理器使用示例:在 Handler 中构造具体规约并调用仓储。

使用方式

按照模板在领域层定义 ISpecification<T> 与 BaseSpecification<T>,在领域层按聚合创建具体规约类,在基础设施层实现 SpecificationEvaluator,并在仓储中集成求值器。处理器中构造具体规约并传入仓储方法即可。代码模板中使用了 {name}、{Entity}、{Entities}、{aggregate} 等占位符,需按项目实际命名替换。

适用场景

适用于采用 Clean Architecture 的 .NET 项目,尤其是需要将复杂查询条件集中管理、复用和测试的场景,例如按组织查询、按 ID 查询、分页搜索等。

限制

资料未提供该技能的安装命令、收费方式、支持平台、性能表现或与其他库的兼容性说明,这些信息暂未提供。