企业应用:应用层查询接口设计
需求
显示的列
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 }
备注
因为这些参数都是由客户端传递而来的,是不能信任的,而且所有的查询条件也不能完全依赖客户端,一些查询逻辑一定要由服务器生成,如:数据权限、业务逻辑。