【编者按】在企业应用的前端开发中,Ajax、Flash 和 Silverlight 争奇斗艳,各有千秋。这次 InfoQ 中文站有幸邀请到来自中国人寿的 Silverlight 专家吴磊先生,为读者分享他的 Silverlight 在企业应用开发中的丰富经验。
就在笔者写下本文的当天,第二届 Silverlight Firestarter 发布会在美国召开,微软企业副总裁 Scott Guthrie 发布了 Silverlight 5 的一系列新特性,并宣布 Silverlight 5 将注重丰富的媒体体验与企业应用开发两大方面的改进。其中针对媒体方面的改进包括 GPU 硬解码、H.264 等 5 项功能,而针对企业应用方面的改进包括 64 位操作系统支持、IE 9 硬件加速、向量打印、文本清晰度、调用非托管代码等 30 多项功能,可以看出 Silverlight 已经逐渐将其未来重心转向企业级应用方面(一直以来,笔者都认为 Silverlight 的强项应该是企业应用)。
Silverlight 作为微软“三屏一云”战略中展现层的重要技术,越来越引起企业开发者的注意。新浪财经、腾讯、淘宝、口碑网等互联网企业已经尝试使用 Silverlight 开发交互性较强的商业应用,而一贯谨慎保守的大型金融公司陆续开始使用 Silverlight 来提高企业应用的用户体验,比如中国人寿(网上服务应用)、中国人保(商务智能应用)已经有相关应用,而像花旗银行、工商银行这样的大型银行也在尝试使用 Silverlight 来实现未来网上银行一些功能。
为什么 Silverlight 在推出短短三年左右时间内就能触动企业开发者呢?原因很简单,Silverlight 具有良好的后台语言框架支持,这就是基于.Net 高级语言的精简运行环境。具体而言原因有三:
- Silverlight 之轻,即较之 WPF、Java Swing、Delphi 等 C\S 架构有更加轻量的运行环境与零维护的特点:使用轻量的 CLR Core 运行时环境,不依赖于客户端环境(无须安装体积庞大的.Net Framework,这一点太棒了)。
- Silverlight 之重,即较之 Html+JavaScript 等 B/S 架构有更优越的客户端弹性:使用 C#高级语言代替 JavaScript 来实现强大的客户端计算能力、支持多线程,继承了 WPF 丰富的样式、控件、特效与动画,更可控的浏览器适应性,更安全的沙箱模式,客户端嵌入式数据库等。
- Silverlight 之美,即较之传统应用有更友好的交互性,更酷的效果。支持完全面向用户体验的开发过程,其快速原型工具使需求与交付物更为明确,用户体验驱动开发,设计与编码分离。
在本文中,笔者要着重强调的是“Silverlight 之轻!”, Silverlight 是企业应用展现层的轻量级解决方案,从本文开始,笔者将采用连载的方式与大家一起探讨 Silverlight 在企业级应用解决方案与特性。
现在越来越多的企业已经开始考虑将原有“竖井状”的 C/S 与 B/S 架构通过 SOA 等理念进行重构与集成,譬如建立以客户、产品、合同为中心的主数据管理平台(MDM),采用数据即服务的方式对逻辑层提供服务,使用企业服务总线(ESB)对这些服务进行消息路由、转换、监控及生命期管理,通过业务流程管理平台(BPM)混编服务实现业务流程自动化,通过业务规则管理平台(BRM)实现对业务逻辑自动化,最后这些应用层服务形成了企业应用的服务器端处理逻辑。而展现层就是企业应用中实现人机交互的最后一步,即信息的输入与展现。现在的企业应用解决方案中基于窗体的 C/S 与基于浏览器的 B/S 架构几乎构成了企业应用的全部,但两者都有其优缺点,C/S 架构在客户端的处理能力与交互性较强,但维护性极差;相反,B/S 架构在客户端的维护性极高,但对信息的处理能力、交互性、跨浏览器一致性方面都有不足。正是如此,相对 C/S 架构更为轻型的 Silverlight 技术就成为了未来高度集成化的企业应用中理想的展现层的候选方案。传统的 C/S 架构,无论是 VC++、Delphi、Java 的 Swing、还是.Net 的 WinForm、WPF 都需要安装体积笨重的运行时环境,即使客户端程序永远不会使用运行环境中的特殊组件,但使用者也只能被动接受这些组件占用计算机资源。而 Silverlight 有着更为轻便的运行式环境(Silverlight3 的运行时环境 4.3M,Silverlight4 为 6M),在如此小的运行环境下面有着 B/S 无法比拟的高级语言支持,也就是说 Silverlight 具有一颗.Net 的心脏—CoreCLR。
CoreCLR 简单来说就是 CLR for Silverlight,是专门为 Silverlight 量身打造的轻型 CLR,用来执行 Silverlight 代码。Silverlight 基于 C#高级语言,使用同样的托管机制与 MSIL 中间语言,CoreCLR 自备编译环境、内存管理器,不依赖于外部环境。打造这个轻型“心脏”的过程并不容易,对于轻型的 RIA 框架来说 Silverlight 运行时环境要考虑两大问题:大小与兼容性。
大小就是运行时环境的大小,从用户的角度来看,下载必须非常小。这就要求将功能集减至最少,目前 Silverlight4 运行时环境大小为 6M,CoreCLR 中的 DLL 文件在 CLR 和 WPF 的类库中几乎都能找到,只不过大大裁剪了尺寸。这其中就包括对基类库(BCL)的消减,.Net BCL 中的很多功能在 Web 客户端上都没有任何意义,例如:由于 Silverlight 不支持 CAS,因此大部分 System.Security 都不是必要的,System.Console 等许多桌面类在 Web 中也没有任何意义。因此,CoreCLR 删减了大量服务器端类库(如 ADO.NET),去除非泛型集合类(如 ArrayList,完全可以通过泛型集合类代替),同时将复杂的桌面类也一并去除(如 PLINQ 和一些动态类),但保留了.NET Compact Framework 和 Silverlight 间的兼容性。
对于兼容性而言,从编程人员的角度来看,针对 CLR 的编码应该始终相同。因此,Silverlight 堆栈底部的各个组件使用了与桌面 CLR 相同的代码,执行引擎和虚拟机都必须相同,这部件包括类型系统、元数据、垃圾回收器 (GC)、JIT 编译器、线程池以及运行时引擎的其他核心部件。但为了适应 Web 应用程序,CoreCLR 进行了一些更改,如富 Internet 应用程序通常简单且运行时间短,JIT 编译器主要侧重于减少启动时间,而非执行更复杂的优化操作,同样,服务器垃圾回收模式可以对使用相似分配模式的多个工作线程进行优化,而对 Web 托管应用程序则行不通,因此,Silverlight 只包含针对交互式应用程序进行优化的标准工作站 GC。
现在的.NET Framework 里有一万个类,十万个方法,但 CoreCLR 中减少到了 46 个命名空间下不超过一千个类。
C#之父(同时也是 Turbo Pascal 与 Delphi 之父)Anders Hejlsberg 认为未来编程语言的发展趋势及未来方向应该朝着框架与工具发展。笔者认为未来的语言发展方向不是朝着大而全的运行时框架方向发展,而是朝着“轻框架、重工具组件”的方向发展。当我们使用 Visual Studio 开发应用程序时,我们首先选择的是“语言”,然后是“运行时框架”,再引入我们需要的“工具组件”。而精干的“运行时框架”与丰富的可选“工具组件”将为企业应用提供更大的弹性、减轻程序大小、优化响应性能。
事实上,目前很多金融企业的核心应用已经在朝着“去客户化”、“去产品化”的小核心方向发展,“小核心”+“大外围”使企业内部核心具有更加持久的生命力、更加灵活的扩展性和更快的反应能力。而企业应用展现层也越来越青睐于使用小而灵活的运行时环境,开发者完全可以根据实际需求挑选合适的工具组件,提供更富弹性的展现层应用。Silverlight 的未来应该更加关注适用性,而不应该过度考虑基本功能的强大,否则将发展成为另一个 WPF,而失去自己的方向。Silverlight4 将 Silverlight3 的身躯加大了 1.7M,加入了一些诸如集合接口 ISet
“对于未来,希望 Silverlight 仍能轻舞飞扬!”
注:部分内容取材于笔者即将发布的新书《- 企业级 RIA 应用与 Silverlight 开发全流程实战》,敬请关注。
关于作者
吴磊,中国人寿 IT 高级技术主管、高级工程师,拥有 7 年企业级应用开发经验,负责过多个业务系统的开发工作。曾获得系统分析师、 PMP 等认证,2003 年开始接触 RIA 技术,并不遗余力的在企业应用中推广 RIA 技术, 2008 年带领团队成功研发了国内首个 Silverlight 企业级应用—中国人寿养老金咨询系统 (PACS),该项目先后在 Silverlight3 发布会、Teched09 技术大会、QCON2010 全球企业开发大会上作为成功案例进行展示。
感谢张凯峰对本文的策划及审校。
给InfoQ 中文站投稿或者参与内容翻译工作,请邮件至 editors@cn.infoq.com 。也欢迎大家加入到 InfoQ 中文站用户讨论组中与我们的编辑和其他读者朋友交流。
评论