用途
该技能用于在 .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 查询、分页搜索等。
限制
资料未提供该技能的安装命令、收费方式、支持平台、性能表现或与其他库的兼容性说明,这些信息暂未提供。