3.使用域服务封装业务逻辑
(1)仍然右键单击web工程ProductsWithDataService.Web,在弹出菜单中选择“添加|新建项”命令。在随后出现的“添加新项”对话框中选择“Domain Service Classes”模板添加一个域服务,输入名称ProductsDomain.csl,最后单击“添加”按钮退出。
(2)在随后出现的“Add New Domain Service Class”对话框。在对话框中选择Product实体,并确保选择了“Enable Editing”复选按钮。最后,再选择对话框最下部的“Generate associated classes for metadata”复选按钮,以保证在元数据中生成相关联的类。
(3)最后,选择菜单“生成|重新生成解决方案”。
随后打开的ProductsDomain服务类自动生成了针对Product实体集的基本CRUD操作的雏形(换句话说,在实际开发中,我们可以添加自定义的逻辑来重构这里的查询,插入,更新以及删除操作)。而且注意到,因为在上面我们勾选了“Enable client access”复选按钮,所以系统自动在类ProductsDomain的前面添加了一个[EnableClientAccess]属性;这意味着,此类将把自己的方法暴露给客户层使用。
至此,我们已经搭起一个基本的Silverlight应用的服务器端框架。接下来,我们讨论Silverlight用户界面相关编程。
4.Silverlight用户界面及基本后台代码编程
其实,从分层角度来看,就客户端Silverlight项目这边来看,也可进一步分为若干子层。例如,.xaml文件可看作最上面的展示层,相应的后台代码文件.xaml.cs则又是一层。
(一)XAML设计
Silverlight 3项目自动生成的主页面文件为MainPage.xaml。现在,打开此文件,并输入如下标记代码:
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable="d" d:DesignWidth="Auto" d:DesignHeight="Auto">
<Grid x:Name="LayoutRoot">
<Grid.RowDefinitions>
<RowDefinition Height="1*" />
<RowDefinition Height="20" />
</Grid.RowDefinitions>
<data:DataGrid x:Name="productGrid" AutoGenerateColumns="true" Grid.Row="0" />
</Grid>
</UserControl>
上面的XAML代码非常简单,不再赘述。
相应的后台代码文件MainPage.xaml.cs的内容如下所示:
//下面是新添加的命名空间引用
using ProductsWithDataService.Web;
using System.Windows.Ria.Data;
namespace ProductsWithDataService
{
public partial class MainPage : UserControl
{
ProductsDomain _domain = new ProductsDomain();
public MainPage()
{
InitializeComponent();
this._domain.Load(this._domain.GetProductQuery());
this.productGrid.ItemsSource = _domain.Products;
}
}
}