智能客户端:用NHibernate和Rhino服务总线构建分布式应用程序 第2部分

在 2010 年 7 月刊的《MSDN 杂志》中,我开始介绍为借阅图书馆构建智能客户端应用程序 的过程。 我将该项目命名为 Alexandria,并决定使用 NHibernate 进行数据访问,使用 Rhino 服务总线实现与服务器之间的可靠通信。

NHibernate (nhforge.org) 是一个对象关系映射 (O/RM) 框架,而 Rhino 服务总线 (github.com/rhino-esb/rhino-esb) 是构建在 Microsoft .NET Framework 上的开源服务总线 实施。 我恰巧参与了这两个框架的深层开发工作,这样就有机会利用我熟悉的技术来实施项目 ,同时为需要了解 NHibernate 和 Rhino 服务总线的开发人员提供一个工作范例。

在上一篇文章中,我介绍了智能客户端应用程序的基本构造块。 我设计了后端以及智能客 户端应用程序和后端之间的通信模式。 此外,我还略微谈到了如何管理事务和 NHibernate 会 话,如何使用和回复来自客户端的消息,以及如何将所有内容融入引导程序。

在本期内容中,我将介绍在后端和智能客户端应用程序之间发送数据的最佳做法,以及分布 式更改管理的模式。 在此过程中,我将介绍其余的实施细节,并为 Alexandria 应用程序提供 一个完整的客户端。

您可以从 github.com/ayende/alexandria 下载示例解决方案。 该解决方案包含三部分: Alexandria.Backend 包含后端代码;Alexandria.Client 包含前端代码; Alexandria.Messages 包含在前两者之间共享的消息定义。

没有单一模型规则

在编写分布式应用程序时,人们最常提出的问题之一是:如何将我的实体发送到客户端应用 程序,然后在服务器端应用更改集?

如果这是您的问题,则您可能是在思考一种主要将服务器端作为数据存储库的模式。 如果 构建此类应用程序,则可以选择使用一些技术来简化此项任务(例如,采用 WCF RIA 服务和 WCF 数据服务)。 不过,使用迄今为止我所概括的体系结构类型时,对于在网络上发送实体实 际上毫无作用。 事实上,Alexandria 应用程序对相同的数据使用了三种不同的模型,其中每 种模型分别最适合应用程序的不同部分。

后端的域模型用于查询和事务性处理,适合与 NHibernate 一起使用。如需进一步优化,可 以拆分查询和事务性处理职责。 消息模型表示网络上的消息,包括与域实体非常接近的一些概 念(示例项目中的 BookDTO 是 Book 的数据克隆)。 在客户端应用程序中,视图模型(类似 于 BookModel 类)将进行优化以便绑定到 XAML 并处理用户交互。

虽然乍看起来这三种模型(Book、BookDTO 和 BookModel)之间有许多共性,但事实上它们 具有不同的职责,这意味着如果尝试将所有这些职责都融入一种模型,则会创建一个繁琐、臃 肿且不通用的模型。 通过按一系列职责拆分模型,我可以使工作变得更简单,因为我可以按其 自身的用途优化每种模型。

从概念性的角度来看,需要为每个用途创建单独模型还有其他原因。 对象是数据和行为的 组合,但当您尝试通过网络发送对象时,则只能发送数据。 这会引出一些有趣的问题。 您会 将应在后端服务器上运行的业务逻辑放在何处? 如果将此逻辑放在实体中,则在客户端执行它 时会发生什么情况?

这种体系结构的最终结果就是您使用的不是真正的对象。 您使用的数据对象是只保存有数 据的对象,而业务逻辑则以针对对象数据运行的过程的方式驻留在其他位置。 由于这会导致逻 辑和代码的分散,更加难以长期维护,因此不赞成这样做。 无论您如何看待此问题,您都需要 在应用程序的不同部分中使用不同的模型,除非后端系统是简单的数据存储库。 这自然又会引 出一个十分有趣的问题:您将如何处理更改?

针对更改集的命令

我允许用户在 Alexandria 应用程序中执行的操作包括:将书籍添加到他们的队列、在队列 中对书籍进行重新排序以及从队列中完全删除书籍,如图 1 中所示。 这些操作需要同时在前 端和后端反映出来。

图 1 对用户的书籍队列可以执行的操作

时间: 2024-10-16 22:40:20

智能客户端:用NHibernate和Rhino服务总线构建分布式应用程序 第2部分的相关文章

智能客户端-使用 NHibernate 和 Rhino 服务总线构建分布式应用程序

有很长一段时间,我的工作内容几乎都是 Web 应用程序.当我要构建一个智能客户端应用 程序时,起初我觉得非常困惑,不知该如何构建这样的应用程序.怎么处理数据访问?智能客 户端应用程序与服务器之间如何通信? 而且,我那时已经投入很多,拥有一些能够显著减少开发时间和成本的工具,而我真的希望 可以继续使用这些工具.我花了一段时间来深入考虑各种细节问题,在这期间,我一直在想如 何让 Web 应用程序更简单些呢,当然我需要先知道如何处理这样的应用程序. 智能客户端应用程序有利有弊.从有利的一面看,智能客户

Internet 服务总线

  作者:Donald F. Ferguson.Dennis Pilarinos.John Shewchuk   摘要:Web应用程序是非常常见的应用程序模型,它们将变得越来越普遍.几乎所有大中型企业的应用程序都提供Web用户界面.在本文中,我们将使用术语"企业"表示大中型企业.软件供应商和集成商.桌面和客户端/服务器应用程序越来越多地使用浏览器作为UI引擎,并通过Web协议调用数据和服务. 软件.应用程序模型以及Web本身都在进行革命性变革.这场变革对计算机世界的影响与客户端/服务器

《微软云计算Windows Azure开发与部署权威指南》——6.6 AppFabric服务总线服务Remoting的应用程序开发

6.6 AppFabric服务总线服务Remoting的应用程序开发 本节将带领大家通过微软发布的Windows Azure Training Kit里的示例学习AppFabric服务总线的服务Remoting的应用程序开发.使用的训练包与6.3节一样,是WATK June2012.exe.示例项目目录为WATK\Labs\ServiceBusServiceRemoting,进行该项目开发所需要的软件环境为(针对Windows 7操作系统). ① IIS 7(开通ASP.NET.WCF HTTP

《微软云计算Windows Azure开发与部署权威指南》——6.7 AppFabric服务总线REST的服务开发

6.7 AppFabric服务总线REST的服务开发 微软云计算Windows Azure开发与部署权威指南 本节介绍如何建立一个简单的服务总线主应用程序,使该程序公开一个基于REST的访问接口.任一台Web客户端,比如浏览器,都可以使用HTTP请求访问服务总线API.本示例使用的是WCF REST编程模型在服务总线上构建REST服务. 1.步骤一:注册账户 ① 在Windows Azure门户创建一个服务命名空间.可参考本章6.2小节的内容. ② 在Windows Azure Manageme

《微软云计算Windows Azure开发与部署权威指南》——6.8 AppFabric服务总线的多播服务开发

6.8 AppFabric服务总线的多播服务开发 本节将创建一个简单的网络中继聊天应用程序,利用该应用程序来让大家对服务总线的多播服务有一个认识.多播通信允许在一个URI上有多个监听者和发送者,每一个动作执行者既是监听者又是发送者.与多播模式对应的是简单的发布-订阅模式. 为了实现多播消息的模式,服务总线提供了另一个绑定,称为"netEventRelayBinding".这个绑定在WCF上的发布-订阅通信模式,其他的WCF内置的绑定都不支持.netEventRelayBinding允许

基础内容: 服务总线缓冲区

在我 2009 年 10 月的专栏文章"服务总线中的路由器"(msdn.microsoft.com/magazine/ee335696) 中,我提出 Windows Azure AppFabric 服务总线未来可能的发展方向:成为最终的侦听器.我提出了路由器功能,并承诺下一步将写写队列. 自那之后,路由器和队列已被推迟到服务总线的第二个版本,暂时代之以由服务总线提供缓冲区.未来版本可能会增加日志记录.诊断和各种检测选项.我会在以后的文章中讲述这些方面.在本文中,我将对缓冲区加以说明,也

WCF服务编程设计规范(6):队列服务、安全和服务总线

WCF服务编程设计规范(6):队列服务.安全和服务总线.本节整理队列服务(Queue Servuce).服务安全(Service Security)和服务总线(Service Bus)的设计规范. Queued Services 队列服务 1. On the client, always verify that the queue (and a dead-letter queue, when applicable) is available before calling the queued s

Azure Services Bus(服务总线)中的工作流(workflow)

在Azure Services Platform上对于工作流服务的支持,一直是我很感兴趣的内容.当然也是疑问比较多的领域.鉴于这方面的资料太少,所以今天就从AzureServicesKit中的一个DEMO出发,来大概了解一下这方面相关内容. 注:今天的示例位于AzureServicesKit安装目录\Labs\Ex02-RoutingWithXPath\end文件夹. (编辑注:是AzureServicesKit\Labs\IntroWorkflowService\Ex02-RoutingWit

《微软云计算Windows Azure开发与部署权威指南》——6.5 AppFabric服务总线基础概念

6.5 AppFabric服务总线基础概念 在大型分布式应用程序中最常见的需求之一就是连通性,而应用程序的整合通常也是IT领域中花费最高.最麻烦的.目前大多数组织机构都采用企业服务总线(ESB)这一解决方案. 作为Windows Azure平台的一部分,服务总线让ESB模式在整个Internet领域中成为现实.服务总线提供了很多可以在典型的ESB解决方案中看到的体系结构特点,包括身份认证和访问控制.命名.服务注册.公共消息池等.对于AppFabric服务总线,这些组件必须设计为能够在云端操作,面