2010年1月18日星期一

WCF RIA 服务 (七)- 中间层 简介

在3-层结构的应用程序中,中间层包含了如何管理在表示层和数据层之间交互的逻辑。我们在中间层应用商业逻辑和验证来确定数据是可接受的。例如,在人力资源应用程序中,我们可以提供一个允许员工提交休假申请的界面,但我们应该确定员工的可休假额度不小于0。因此,我们在提交申请之前,在中间层添加逻辑来检测员工的休假额度。
为了创建最好的RIA客户端用户体验,例如Silverlight应用,我们经常想在客户端执行也可在服务端执行的同样的商业逻辑。因此,中间层的代码在客户端和服务端同步就变得非常重要。WCF RIA Services使我们可以使用.NET Framework在中间层写应用逻辑。RIA Services从中间层为表示层生成代码,所以这些层总是同步的。

同数据访问层一起工作

当我们使用RIA Services来开发中间层时,可以使用任何种类的数据访问层。例如,我们可以连接下面的数据访问层:

  • Entity Data Model
  • LINQ to SQL object model.
  • Common language runtime (CLR) object.
  • Web service that exposes data from its source.

我们可以对数据模型应用验证检测以对来自表示层的数据值执行限制。

在有些情况下,我们不得不与那些不仅存在于一个表中的数据进行交互。RIA Services提供了一个可编程的框架,它支持更改级层数据模型(例如订单和订单详情的关系),继承数据模型(例如父和孩子关系),数据映射模型(例如从客户和地址表中提取数据放到一个单独的数据模型中的非正规数据)。

Domian Services

RIA Services提供DomainService类,这个类是所有做为数据层的数据接口类的基类。当创建一个domain Service的实例时,就指定了这个想从客户端访问的实体类。还可以通过domain service指定允许的数据操作,也可以向domain service中添加应用逻辑。对每一个向客户端开放的domain service,RIA services都将会为客户端应用程序生成一个DomainContext类。

Shared Code

在某些情况下,我们不得不在中间层项目和表示层项目中共享代码,但又不想把他们放入domain services 或 一个实体类。 例如,可能不得不引用一个包含应用逻辑并被许多其他项目使用的类库。或者,不得不创建一个从实体类连接值或改变值的自定义属性,例如以"last name, first letter of first name"的格式来显示名字。RIA Services允许我们在中间层包含类或程序集,这些类或程序集在客户端无需改动就可以访问。

生成客户端代码

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

  • 每个注释着EnableClientAccessAttribute属性的domain service。
  • 每个domain service引用的实体类。
  • 由共享命名约定命名的代码文件(*.shared.cs或*.shared.vb)都会原样地拷贝到客户端项目中。

通过客户端代理类,客户端也可以访问中间层代码。当中间层的代码改变时,客户端的代理类会自动重生成。所以表示层总是与中间层同步。

没有评论:

发表评论