中间层

本节提供有关在 WCF RIA Services 应用程序的中间层内使用域服务、共享代码和数据实体的信息和指导。在 3 层应用程序中,中间层包含用于管理表示层和数据层之间的交互的逻辑。在中间层中应用业务规则和验证检查以确保数据处于可接受的状态。例如,在人力资源应用程序中,您可能提供一个用户界面来允许员工提交休假请求,但是必须确保员工的剩余假期不小于零。因此,您在中间层中添加逻辑来检查在提交休假请求前员工的剩余假期。

为了在 RIA Services 客户端(如 Silverlight 应用程序)中实现最好的使用体验,您经常要在客户端上强制实施将在服务器上强制实施的同一业务规则。这要求客户端和服务器上的中间层代码同步。RIA Services 允许您使用 .NET Framework 编写中间层中的应用程序逻辑。RIA Services 自动从中间层代码生成表示层的代码,因此这些层始终是同步的。本主题及其附属主题说明如何使用域服务、共享代码和数据实体来生成中间层。

数据访问层

在使用 RIA Services 开发中间层时,您可以使用任何类型的数据访问层。例如,您可以连接到以下数据访问层:

  • 实体数据模型。

  • LINQ to SQL 对象模型(仅当安装了 RIA Services 工具包时才能使用此模型)。

  • 公共语言运行时 (CLR) 对象。

  • 从其源公开数据的 Web 服务。

您可以对您的数据模型应用验证检查来对从表示层提交的数据值强制实施限制。

在某些种情况下,您必须与在多个表中存在的数据交互。RIA Services 提供了一个编程框架,该框架支持修改层次结构数据模型(如 Order 和 OrderDetails 关系)、继承数据模型(如 Parent 和 Child 关系)以及数据投影模型(如通过将 Customer 和 Address 表中的值提取到单个数据模型来取消数据的标准化)。有关更多信息,请参见 数据

在您的应用程序中,您可能需要显示各种数据源的数据或将单个实体公开给多个域服务。WCF RIA Services 通过支持不同 DomainContext 类型的实体之间的引用,允许实现此方案。有关更多信息,请参见演练:在多个域服务间共享实体

默认情况下,RIA Services 不为检查数据并发而将整个原始实体随已更改的值传递到数据访问层。RIA Services 仅存储和传回那些标有 RoundtripOriginalAttribute 属性、 ConcurrencyCheck 属性或 TimeStamp 属性的成员。有关更多信息,请参见数据

域服务

域服务是域的业务逻辑的公共抽象。它包括由域业务逻辑组成的实体和操作。RIA Services 提供了 DomainService 类作为充当数据层中业务逻辑接口的所有类的基类。实现域服务时,指定要为从客户端访问而公开的实体类。您还指定通过域服务允许的数据操作,可以将应用程序逻辑添加到域服务。对于为客户端访问启用的每个域服务,RIA Services 将为客户端应用程序生成一个 DomainContext 类。有关更多信息,请参见域服务

有关保护您的域服务安全的信息,请参见 WCF RIA Services 的安全性

共享代码

在某些方案中,您必须添加在中间层项目和表示层项目之间共享的代码,但是不想将该代码放入域服务或实体类中。例如,您可能要引用包含在多个其他项目中使用的应用程序逻辑的库。或者,您可能要创建一些自定义属性,这些属性用于合并或更改实体类的值,如采用格式“姓氏, 名字的第一个字母”的显示名称。RIA Services 允许您在不必更改客户端项目即可访问的中间层中包含类或程序集。有关更多信息,请参见共享代码主题。

客户端代码生成

使用 RIA Services 链接中间层项目和表示层项目时,RIA Services 框架自动从中间层为客户端生成代码。为以下中间层代码生成客户端代码:

  • 使用 EnableClientAccessAttribute 属性进行批注的每个域服务。

  • 由域服务引用的每个实体类。

  • 复制使用共享命名约定(*.shared.cs*.shared.vb))命名的代码文件而不修改客户端项目。

此中间层代码通过客户端代理类对客户端可用。中间层上的代码更改时,自动重新生成客户端代理类,以便表示层始终与中间层同步。

有关更多信息,请参见客户端代码生成