WCF RIA Services – Domain Services

Posted on 2009-12-09 09:15  Metisria Geo  阅读(2676)  评论(5编辑  收藏  举报

在一个三层架构的应用程序中,中间层介于表示层和数据层之间,你所写的业务逻辑和数据验证都将在中间层出现。创建拥有良好用户体验的RIA应用,你需要客户端和服务端有着相同的业务规则,因此在客户端和服务端保证同步的中间层变得至关重要。WCF RIA Services可以让你在中间层用.NET框架编写逻辑应用,下面将讲述如何使用Domain Services以共享代码、数据实体来创建中间层。

DomainService类是所有服务端domain services类的基类,另外WCF RIA Services也提供了LinqToEntitiesDomainServiceLinqToSqlDomainService两个继承自DomainService的抽象类。
如果不熟悉WCF RIA Services,可参见WCF RIA Services 简单应用

数据操作方法
1.Query

返回值

IEnumerable<T>, IQueryable<T>, entity

参数 任何数字(Any number)
命名前缀 任何名字(Any name)
属性(Attribute) [Query]
示例 public IQueryable<Product> GetProducts()

2.Update

返回值

无(None)

参数 实体(Entity)
命名前缀 Update, Change, Modify
属性(Attribute) [Update]
示例 public void UpdateProduct()

3.Insert

返回值

无(None)

参数 实体(Entity)
命名前缀 Insert, Add, Create
属性(Attribute) [Insert]
示例 public void AddProduct(Product product)

4.Delete

返回值

无(None)

参数 实体(Entity)
命名前缀 Delete, Remove
属性(Attribute) [Delete]
示例 public void AddProduct(Product product)

5.Custom

返回值

无(None)

参数 实体(Entity)和任何数字参数,实体是必须的参数
命名前缀 任何除了以Update、Insert、Delete为前缀
属性(Attribute) [Update(UsingCustomMethod=true)]
示例 [Update(UsingCustomMethod=true)]
public void IncreaseUnitPrice(Product product, decimal price)

6.Invoke、Resolve

  Invoke Resolve
返回值 不限 布尔
参数 不限

Current entity
Original entity
Store entity
Boolean

命名前缀 不限 Resolve
属性(Attribute) [Invoke] [Resolve]


定义了公开的数据操作之后,你可以直接向Domain Services中添加所需的应用程序逻辑。Domain Services作为WCF服务,是建立在WCF概念之上的。
ProductDomainService.cs

image 

一、使用Query方法
MainPage.xaml中添加如下代码
image 
在Button的Click事件名处右键->导航到事件|查看代码
image  
image

Load方法的第2个参数是System.Action<LoadOperation<T>>委托。
上述操作是调用Domain Services的GetProductById方法实现查询数据,如果是调用GetProducts(自动生成)方法,详细参见WCF RIA Services 简单应用,不同之处如下:
image  
另外一种绑定数据的方式:
image 

二、使用Insert、Update、Delete等方法
有关Invoke、Resolve数据操作方法,本人尚未知有何用途,也就是不知如何使用。
仅演示Update和Delete方法。
image 
image 

三、总结
在添加DomainServices时候,选择可用的Context,而ADO.NET数据服务则默认是 空,需要手动添加。通过DomainServices获取Entities,完全支持Entities Query,操作起来十分方便。另外DomainServices也可用在ASP.NET客户端。
image
image
 image

跟着微软跑,实在是累…
SL1.0,几乎全是js脚本,不支持.NET编码,一年多之后…
SL2.0,虽然支持了.NET编码,但不支持数据库操作,而后不到一年…
SL3.0,不错,有了.NET RIA Services,而且从beta到release不到半年,又增加了N多控件,也有了不少的教材(书),书还没捂热乎呢,SL4beta就出来了……  有望得到企业应用(信息系统)吗,开发难度大(会编码的人不会做设计,我想N多程序员宁可用.NET代码控制一个动画,也不愿用Blend去完成)……

Copyright © 2024 Metisria Geo
Powered by .NET 8.0 on Kubernetes