企业应用:应用层查询接口设计

需求

显示的列

Columns。

查询面板的查询参数

SearchArguments。

动态查询(允许用户自定义各种查询)

DynamicFilterGroup。

排序

Sorters。

分页信息

Page。

ItemsPerPage。

示例代码

 1 using System;
 2 using System.Collections.Generic;
 3 using System.Linq;
 4 using System.Text;
 5 using System.Threading.Tasks;
 6 
 7 using Happy.Query;
 8 using Happy.Query.Filters;
 9 
10 namespace Happy.Application.Query
11 {
12     /// <summary>
13     /// 查询请求。
14     /// </summary>
15     public sealed class QueryRequest
16     {
17         /// <summary>
18         /// 显式的列。
19         /// </summary>
20         public List<string> Columns { get; set; }
21 
22         /// <summary>
23         /// 查询参数。
24         /// </summary>
25         public SearchArgument[] Arguments { get; set; }
26 
27         /// <summary>
28         /// 高级查询。
29         /// </summary>
30         public DynamicFilterGroup Group { get; set; }
31 
32         /// <summary>
33         /// 排序器。
34         /// </summary>
35         public Sorter[] Sorters { get; set; }
36 
37         /// <summary>
38         /// 页码。
39         /// </summary>
40         public long Page { get; set; }
41 
42         /// <summary>
43         /// 每页显式的记录数。
44         /// </summary>
45         public long ItemsPerPage { get; set; }
46 
47         internal QueryArgument ToQueryArgument(FilterDefinition filterDefinition)
48         {
49             var queryArgument = new QueryArgument();
50             queryArgument.Columns = this.Columns;
51             queryArgument.OrderClause = this.Sorters.ToOrderClause();
52 
53             var whereClauses = new List<WhereClause> { this.Group.ToWhereClause() };
54             if (filterDefinition != null)
55             {
56                 whereClauses.Add(filterDefinition.BuildWhereClause(this.Arguments.ToArguments()));
57             }
58             queryArgument.WhereClauses = whereClauses;
59 
60             return queryArgument;
61         }
62     }
63 }

备注

因为这些参数都是由客户端传递而来的,是不能信任的,而且所有的查询条件也不能完全依赖客户端,一些查询逻辑一定要由服务器生成,如:数据权限、业务逻辑。

原文地址:https://www.cnblogs.com/happyframework/p/3481441.html