PDC09 和 Mix10 上宣布了两条重大消息,分别是推出 Silverlight 4 Beta 和 RC。读到本文时,发布到网上的 Silverlight 4 完全版本已经可供下载。除广泛的打印支持外,它还支持权限升级、网络摄像头、麦克风、toast、剪贴板访问,等等。凭借其全新的功能集,Silverlight 4 作为一种多平台的丰富 UI 框架,可以从容应对与 Adobe AIR 之间的正面交锋。
尽管我对这一切确实感到兴奋,但我的主要角色是一名业务应用程序开发人员,我所关注的一点是如何使用一种简单的方法将我的业务数据和逻辑融入 Silverlight 应用程序。
对于 Silverlight 业务线应用程序,我关注的一个问题是如何连接到数据。在 Silverlight 3 中创建自己的 Windows Communication Foundation (WCF) 服务以及连接到该服务,是没有任何障碍的。但该版本还有很大的改进空间,尤其是从 ASP.NET 或桌面应用程序连接到数据时所能采取的诸多方式,有待改善。桌面应用程序和 Web 应用程序可以通过 Nhibernate、实体框架 (EF) 或原始 ADO.NET 结构直接连接到数据库,但 Silverlight 应用程序与我的数据之间却由“云”所阻隔。我将这种阻隔称为“数据鸿沟”。
跨越这道鸿沟乍一看可能非常简单。很明显,现在有很多数据丰富的 Silverlight 应用程序在某种程度上已经实现了这种跨越。但起初看似简单的任务随着您解决更多的问题后反而变得越来越复杂。如何通过网络跟踪更改?如何封装位于防火墙两端的实体内的业务逻辑?如何防止传输详细信息泄露您的业务敏感信息?
用来解决这些问题的第三方工具越来越多,但 Microsoft 也发现需要提供某种解决方案,因此推出了 WCF RIA 服务(以前称 .NET RIA 服务),简称 RIA 服务。2009 年 5 月版《MSDN 杂志》的“使用 Silverlight 3 构建数据驱动的开支应用程序”(msdn.microsoft.com/magazine/dd695920) 中完整介绍了 RIA 服务。从第一次受邀参与 Beta 程序开始,我便一直在关注 RIA 服务,向开发团队建言献策并学习如何在我自己的应用程序中应用该框架。
RIA 服务论坛中的一个常见问题是,RIA 服务如何与最佳实践体系结构相适应。我一直对 RIA 服务的“基于数据的窗体设计”基本功能印象深刻,但我也的确看到了改善我的应用程序体系结构的机会,因此框架问题没有影响到我的应用程序逻辑。
KharaPOS 简介
我开发了一个范例应用程序:KharaPOS,旨在针对我在本文陈述的概念提供一个相关实例。该实例是使用 RIA 服务、实体框架和 SQL Server 2008 在 Silverlight 4 中实现的销售点 (POS) 应用程序。最终目标是使该应用程序能承载于 Windows Azure 平台和 SQL Azure,但 Windows Azure 平台对 Microsoft .NET Framework 4 的支持有一点问题(甚至不支持)。
在这个过渡期,KharaPOS 可作为一个使用 .NET Framework 4 创建实际应用程序的好例子。该项目通过 CodePlex 放在 KharaPOS.codeplex.com 中。您可以从该站点下载代码、查看文档以及加入关于开发此应用程序的讨论。
我要说明的是,对于 KharaPOS 应用程序的大部分设计与功能,我借鉴了由 Peter Coad、David North 和 Mark Mayfield 合著的《对象模型:策略、模式与应用,第 2 版》(Prentice Hall PTR,1996)。我将重点介绍该应用程序的一个子系统:目录管理系统(请参阅图 1)。
图 1 目录管理系统的实体数据模型