一个富瘦客户端、分布式客户端-服务器环境,使用声明式语言架构






3.29/5 (8投票s)
2004 年 8 月 3 日
9分钟阅读

46636
一篇白皮书,讨论声明式编程对富瘦客户端的好处。
引言
在过去十年中,有三大力量得到了发展——由浏览器托管的瘦客户端(HTML)应用程序,分布式客户端-服务器应用程序,以及声明式应用程序架构(HTML、XML、SOAP等)。同时,也一直在朝着富客户端架构努力,以利用客户端机器和操作系统的特定且更丰富的功能。此外,声明式编程从未得到广泛接受,除了XUL/Mozilla社区。在大多数情况下,分布式应用程序仍然将业务逻辑保留在客户端,主要将服务器用于数据管理任务——数据库、Web服务、电子邮件和消息传递,以及数据集成和挖掘。
几项最新的技术进步,例如跨平台开源的Mono项目,正在创造一个环境,允许独立软件供应商(ISV)开发富瘦客户端应用程序,这些应用程序可以利用客户端机器和操作系统的特性和功能,同时将业务逻辑保留在服务器上。这得益于对声明式编程的重新关注,正如微软Longhorn操作系统中XAML的最新引入以及XUL社区对MyXaml等XAML类解析器的持续开发所证明的那样。
富瘦客户端
富瘦客户端架构必须利用客户端的硬件和操作系统特性,同时将业务逻辑和数据管理都委托给服务器。客户端应用程序中剩下的主要是用户界面的管理——显示、将用户操作传递给服务器,以及响应服务器发出的命令。出于性能原因,某些业务逻辑可能会放在客户端。有两种常见的方法——基于浏览器的应用程序(使用HTML作为声明式语言)和客户端小程序,几乎完全使用命令式编程。基于浏览器的瘦客户端(在所有平台上运行)的优势和富客户端(性能和显示)的优势,终于可以通过通用框架和超越简单显示的声明式语言结合起来。
基于浏览器的瘦客户端的终结
本白皮书认为,基于浏览器的瘦客户端最终将被一种更丰富的声明式标记语言取代,该语言利用Mono等跨平台兼容框架。这与在ASP.NET下运行并带有客户端JavaScript引擎的HTML应用程序有何不同?首先,应用程序利用框架的显示功能,而不是通用的HTML。这为用户提供了熟悉且丰富的环境。此外,程序员可以使用丰富的框架控件,如树、菜单和选项卡,更快速、更经济地创建应用程序,而HTML对这些控件的支持很差。
其次,程序员需要精通至少三种语言(服务器端、HTML和JavaScript)和多个对象模型的负担,大部分被消除或减轻了。为此,客户端和服务器应用程序使用通用的声明式架构,由通用框架管理。HTML严格来说是一种显示格式。如今可用的更通用的XAML解析器提供了一种格式,也可以用于非显示的图形对象构建。开发人员现在可以使用相同的、一致的标记格式和相同的.NET框架来开发客户端和服务器端。
命令式编程的小程序
第二种情况,提供富客户端体验,通常存在跨平台兼容性不足的问题,以及客户端应用程序的业务逻辑负担。创建跨平台应用程序成本高昂(通常需要单独的开发工作),而要从应用程序中卸载业务逻辑,则需要自定义的命令式编码来处理服务器端连接。客户端上剩余的显示层和业务逻辑仍然以命令式编码并嵌入在客户端应用程序中,使得更新客户端的简单性不如基于服务器的网页。
一种解决方案是只为客户端提供一个简单的引擎,该引擎能够解析显示层的声明式标记(类似于JavaScript引擎),客户端组件实例化(这超出了JavaScript的范围),以及动态的运行时编译命令式代码。这种标记将以类似于网页被服务到浏览器的方式被服务到客户端,但在此情况下,引擎利用通用框架来提供不限于特定平台的丰富客户端体验,并且比JavaScript提供的功能丰富得多。
对ISV的好处显而易见:开发人员可以在客户端和服务器上使用相同的语言进行命令式编程,使用相同的声明式语言处理客户端和服务器的声明式方面,并使用相同的框架开发客户端和服务器应用程序。通过使用加密、数字签名和非匿名连接,可以解决安全问题,并可能实现“按使用付费”的成本模型。
声明式架构
上述部分提到了一个声明式语言,它超越了HTML的功能,并为客户端和服务器应用程序开发提供了统一的解决方案。下一节将探讨声明式编程和命令式编程之间的区别。
什么是命令式编程?
命令式编程是程序员每天都在做的事情,无论是使用C、C++、Java、C#、VB等。它意味着编写控制对象的指令。借用军事术语,它是编程的“指挥与控制”部分。程序员编写响应用户操作、执行决策逻辑、执行进程和工作流以及更改应用程序状态的代码。
什么是声明式编程?
声明式编程也是程序员每天都在做的事情,只是思考较少。它是代码中定义图形对象、实例化类和初始化应用程序状态的部分。图形对象是一个或多个树,表示对象的层次结构,包括树中对象之间的关联。没有这种关联,计算机就无法表示“一辆车有四个轮子”等“事物”的组合。
声明式编程是如何使用的?
声明式编程是平台无关的。表达声明式编程的一种自然方式是使用XML,其结构也是平台无关的。任何网站实际上都使用了声明式编程,因为它用HTML编写,而HTML是用XML结构表示的。然而,HTML缺乏两样东西。首先,创建富客户端外观和感觉的能力。其次,创建和操作由底层框架支持的复杂和有状态图形对象的能力。HTML,即使有JavaScript,也无法胜任这项任务,原因在于它依赖服务器来维护会话状态的无状态特性,这使其毫无意义。
声明式编程的其他优点
声明式编程的其他优点包括:
- 将应用程序的声明式和命令式方面分开可以提高应用程序的可维护性。
- 将用户界面方面与业务逻辑和数据持久化方面分开。
- 图形对象独立于每个对象的功能来构建,这减少了应用程序需要执行的“工作”。
- 对象之间的相互依赖性大大降低,使得应用程序更能抵御变化和增长。
这些都足以考虑将应用程序的声明式和命令式方面分离成两个不同的关注点。
富瘦客户端
声明式编程的好处应该很清楚,但仍然存在如何实现富瘦客户端的“富”的部分的问题。随着Mono 1.0版本的发布——一个基于.NET框架的全面的开源开发平台,使IT和ISV开发人员能够以前所未有的生产力构建Linux和跨平台应用程序——在非WinTel平台上提供丰富的用户界面是可能的。
Mono提供的第二个优势是语言的统一。程序员现在可以利用C#进行服务器端业务逻辑和数据持久化层,同时也可以在客户端使用C#来实现以性能为导向的业务逻辑,此外还可以管理用户界面状态。使用另一个开源项目MyXaml,开发人员能够创建可以在.NET环境中跨平台运行的应用程序,其中包含运行时编译的C#代码来处理客户端和服务器的命令式需求。
统一的客户端-服务器开发
通过摆脱服务器端严格的命令式开发方法,同时摆脱客户端HTML的有限功能,声明式优势开始显现。客户端和服务器都可以利用相同的声明式标记格式、相同的底层.NET框架,以及用于命令式编程需求的相同语言。如前所述,Mono/MyXaml组合是今天能够实现这一结果的技术。
分布式服务器环境
与图形对象一样,现在为创建复杂的“服务器图”中的互连打开了大门,其中业务逻辑、数据持久化和其他数据服务分布在多个和冗余的服务器之间。例如,富瘦客户端可能与业务逻辑服务器、Web服务和数据持久化服务器通信,或者服务器图可以更改为只有业务逻辑服务器与数据持久化服务器通信。
无论配置如何,分布式环境都有几个优势。首先,应用程序更容易维护和升级。当用户连接到应用程序服务器时,服务器可以自动下载任何新的显示层组件和显示层逻辑(PLL)。此外,ISV只需更新服务器即可引入新的或更改的业务逻辑和数据持久化方案。其次,该系统更容易增加冗余。第三,底层框架可以在客户端-服务器通信中内置会话特定数据的加密和压缩,从而缓解了当今许多安全问题。声明式标记也可以加密和数字签名,进一步降低了运行富瘦客户端时的安全担忧。
结论
由于跨平台.NET框架支持、声明式编程解析和运行时编译能力的进步,HTML网页的时代实际上已经屈指可数。更激进的立场是,ASP.NET本身也将被淘汰,取而代之的是统一的客户端-服务器开发语言和声明式架构。这就是本白皮书所持的立场。尽管它认识到这种变化需要时间,并且这里提出的许多想法需要被开发社区充分接受,但HTML和ASP.NET的消亡似乎是不可避免的。然而,考虑到最终用户将受益于独立于硬件平台的丰富用户体验,ISV将受益于降低开发成本和提高可维护性,这种变化似乎是不可避免的。