技术开发 频道

Silverlight 3 RIA服务编程中使用自定义方法及服务操作

 编写应用程序逻辑

 本案例中的业务逻辑层是由宿主Web工程提供的。而且,在RIA服务编程环境下,编写应用程序逻辑部分主要是通过编写域服务(Domain Service)方法实现的。

 现在,上面的用户界面仅仅做到了基本(或原始)产品数据的加载显示。下面,我们将新增一些功能:折扣选定的产品和显示竞争对手的价格。为了折扣选定的产品,我们需要把其价格降低几个百分点,此数据由用户给出。为了显示竞争对手的价格,我们需要进行一个带外服务器端查找。在实际应用开发中,这种查询可能相当复杂,如查询另一个网站以获得最好的价格,等待。为了简便起见,我们将仅仅返回一个低于标价5%的价格。

 显然,实现上面的操作,要求编写不属于基本CRUD操作的域服务方法-自定义方法。

 (一)关于自定义方法

 自定义方法是异步域操作时使用一些额外的应用程序逻辑实现的除了基本CRUD操作(创建/更新/删除)外的操作。

 自定义的方法具有与基本CRUD操作一样的变更跟踪和延迟执行特征。这意味着,在客户端的更改将不会立即被提交到服务器,而是直到调用DomainContext.SubmitChanges()方法之后完成。

 (二)自定义方法的声明

 有两种方式可以把DomainService内定义的方法标记为一个自定义的方法:

    通过公共约定的方法:①返回void类型;②使用实体作为第一个参数;③不是创建/更新/删除方法约定的表达形式。

    在方法前面修饰以CustomAttribute属性。

 在下面的代码片断中,我们介绍了两种方式,但只有一种方式是必要的。此代码实现了一种简单的折扣算法。注意,通过前面的提示你可能已经猜出,此代码应加在DomainService Catalog的内部。

 请看下面的代码:

 [Custom]

 public void DiscountProduct(Product product, int percentage)

 {

 this.Context.Product.Attach(product);

 decimal newPrice = product.ListPrice * (1 - percentage / 100m);

 product.ListPrice = newPrice; // Do logging/reporting here

 }

 在上面代码中,RIA服务把当前状态的实体作为参数传递给自定义方法。当然,如果你需要使用原始的实体状态的话,应当使用下面代码:

 this.ChangeSet.GetOriginal(product);
0
相关文章