快捷搜索:  as  2018  FtCWSyGV  С˵  test  xxx  Ψһ  w3viyKQx

澳门新葡新京返水在哪里:Apply SOA Design Patterns with WCF (4) WCF Database Paging



我们在从新发现轮子吗?

已经有很多半据库端分页和排序的实现规划了,从微软的LINQ to SQL和Entity Framework到无数的ORM框架和基于存储历程的分页和排序实现。

然则,构架得很好的支持跨WCF通信的数据库端分页和排序规划还很少见到。大年夜多半数据库端分页和排序规划要么依附于不能被序列化的工具,要么裸露了太多SQL相关的信息给客户端,以致可能容许客户法度榜样直接构造SQL或伪SQL片段,这样就不能很好的避免SQL注入。

以是,我们是在立异而不是从新造轮子。

我们的目标

下面是这个跨WC澳门新葡新京返水在哪里F通信的分页排序规划的功能列表:

LINQ风格的强类型查询说话

支持分页和排序

支持常用的数据库操作和措施

避免SQL注入

暗藏数据布局和SQL的细节

查询工具能改能跨WCF通信

多半据库查询说话扩展支持

支持和第三方诗句造访组件和ORM类库的整合

类图

  图片看不清楚?请点击这里查看原图(大年夜图)。

各个类的职责

Criteria – 主要的携带关于一个查询的所有信息的类

IExpression – 所有构成Criteria的元素的接口

Expression类– 代表查询中不合类型的表达式

Parameter Expression类 – 代表不合类型的参数,每个参数包装了一个原生类型的数据值

IColumn – 所有Column表达式的接口

Column类 – 代表查询中不合类型的Column

Condition – 代表一个逻辑表达式,可以介入诸如And,Or,Not这样的逻辑操作

表达式的操作和措施

常用的操作和措施应该定义为类的公共措施,并且,假如可能,为每个操作也定义响应的操作符重载

对特定命据库的操作和措施应该要么定义在承袭的子类中,要么定义为扩展措施

查询示例代码

1 public class TestCriteria : Criteria

2 {

3     public TestCriteria()

4         : base("TestTable", "Test")澳门新葡新京返水在哪里

5     {

6     }

7

8     public BooleanColumn BooleanColumn = new BooleanColumn("BooleanColumn");

9     public ByteColumn ByteColumn = new ByteColumn("ByteColumn");

10     public Int16Column Int16Column = new Int16Column("Int16Column");

11     public Int32Column Int32Column = new Int32Column("Int32Column");

12     public Int64Column Int64Column = new Int64Column("Int64Column");

13     public DateTimeColumn DateTimeColumn = new DateTimeColumn("DateTimeColumn");

14     public StringColumn StringColumn = new StringColumn("StringColumn", true);

15     public GuidColumn GuidColumn = new GuidColumn("GuidColumn");

16     public DoubleColumn DoubleColumn = new DoubleColumn("DoubleColumn");

17     public DecimalColumn DecimalColumn = new DecimalColumn("DecimalColumn");

18 }

19

20 var criteria = new TestCriteria();

21 criteria.MaxResults(10).AddSortBy(criteria.Int32Column, true).AddSortBy(criteria.StringColumn, false);

22 criteria.And(criteria.Int32Column == 1).Or(criteria.StringColu澳门新葡新京返水在哪里mn.Like("test"));

23

24 criteria.AddResultColumn(DateTimeColumn).AddResultColumn((criteria.Int32Column + 1).As("ID")).AddResultColumn(criteria.StringColumn.As("Name"));

25 criteria.SkipResults(10);

26 criteria.Distinct();

27

28 var queryResult = aWcfService.Query(criteria);

第三方数据造访和ORM类库整合

由于上面评论争论的类都不是只能用于特定命据库造访组件的,以是,一个criteria可以被觉得是一个查询的元数据,可以被翻译为随意率性一个实际的数据造访实现。例如,翻译成LINQ to SQL查询说话或者翻译成一个能直接履行的DbCommand。

基于Criteria的WCF办事的好处

支持繁杂前提的查询

更轻易的支持分页和排序

极大年夜的削减数据库风格的查询类型的办事的数量

提示

无论LINQ照样这种强类型的查询说话都有额外的运行时耗损,包括构造criteria和翻译成实际的数据造访说话的内存、CPU运行光阴耗损。澳门新葡新京返水在哪里以是对高机能场景,存储历程照样应该是数据库查询类办事首选的实现规划。

在实践中,对企业级利用来说,一样平常,除了专门用来实现并不轻易实现的分页和排序澳门新葡新京返水在哪里功能,这种基于Criteria的WCF办事更多的照样用来实现原型法度榜样和被用来在终极的利用中作为一个后备办事。我照样会定义包孕清晰的营业含义名称的办事,如LoadByID(),GetAllXXX(),并且只要可能就用存储历程来实现。

参考

(1) SOA Design Pattern Catalog: http://www.soapatterns.org/

系列文章:

Apply SOA Design Patterns with WCF (1) Configuration Centralization (设置设置设备摆设摆设集中治理)

Apply SOA Design Patterns with WCF (2) WCF Automatic Deployment (自动化支配)

Apply SOA Design Patterns with WCF (3) Automatic Service Locating (自动化办事定位)

您可能还会对下面的文章感兴趣: