(零)深入浅出 WPF —— WPF 之 What & Why

243 阅读5分钟

微软 Windows 操作系统成功推出已有十多年,在 Windows 系统平台上从事图形用户界面(Graphic User Interface,GUI)程序开发的程序员数不胜数,GUI 程序员们手中的开发工具经历了 Win32API -> MFC(及同类产品) -> ActiveX/COM/Visual Basic -> Windows Forms 的变迁,每一次变迁都使开发效率和质量产生飞跃。

从2007年开始,微软推出了它的新一代 GUI 开发工具 Windows Presentation Foundation(WPF),并且把它定为未来十年 Windows 平台 GUI 开发的主要技术,时至今日,不但 Windows Vista、Windows 7、Windows Server 2008、Windows Server 2008 R2 等系统已经无缝集成了 WPF,连 Visual Studio 2010 等重要产品也适用 WPF 进行开发,可见微软在 WPF 技术方面的务实精神与决心。

什么是 WPF

WPF是 Windows Presentation Foundation 的简称,顾名思义是专门用来编写程序表示层的技术和工具

WPF 是做什么用的呢?当今的程序,除了一些非常小巧的使用工具外,大部分程序都是多层架构的程序,一提到多层架构,一般就至少包含 3 层:数据层、业务逻辑层和表示层

album_temp_1733532491.png

这三层的功能大致如下:

  • 数据层:用于存储数据,多由数据库构成,有时候也用数据文件能辅助存储数据。
  • 业务逻辑层:用于根据需求使用计算机程序表达现实的业务逻辑。这一层一般会通过一组服务(Service)向表示层公开自己的各个功能。
  • 表示层:负责除了把数据和流程展示给用户看,还负责展示流程,响应用户操作等。

WPF 的功能就是用来编写应用程序的表示层,至于业务逻辑层和数据层的开发也有专门的新技术,比如业务逻辑层的新技术是 WCF(Windows Communication Foundation)和 WF(Windows Workflow Foundation),微软平台上用于开发表示层的技术不算少,包括 WPF、Windows Forms、ASP.NET、Silverlight 等。

WPF 与 Silverlight 的关系

目前,.NET 开发人员学习 WPF 的回报是相当高的,原因是几乎整个微软新一代开发框架都能看到 WPF 的影子。微软的新一代开发技术框架包括 Windows Presentation Foundation(WPF)、Windows Communication Foundation(WCF)和 Windows Workflow Foundation。WCF的用途是编写分布式应用程序的业务逻辑层,并以网络服务的形式暴露给客户端的服务端消费者,基于 WCF 和 Entity Framework 的 WCF Data Service 和 WCF RIA Service 是微软迄今为止最佳的数据访问层,而这一数据访问层的最佳消费者就是 WPF 和 Silverlight。所以,学习 WPF 技术可以为 WCF 的学习锦上添花。WF 的主要作用是设计工作流,而设计工作流的编程语言正是 WPF 中的界面设计语言——XAML,也就是说,学完 WPF,WF 也会了一小半。

微软原本就定义 Silverlight 是 WPF 的一个子集,是 WPF 的“网络版”(Silverlight 的开发代号是 WPF/E,意味 WPF 简化版)。为了让 WPF 在浏览器里跑起来,微软所做的事情就是在技术理念不变的情况下对 WPF 进行“瘦身”——去掉一些不常用的功能,简化一些功能实现,对多组实现同一目的的类库进行删减,只保留一组,再添加一些网络通信的功能。通过下表,我们就能看到 Silverlight 和 WPF 的技术重叠率之高:

技术项目在 WPF 中在 Silverlight 中
XAML语言完整完整
控件完整完整
布局完整完整
Binding完整基本完整
依赖属性完整基本完整
路由事件完整简化
命令完整
资源完整完整
控件模板完整基本完整
数据模板完整基本完整
绘图完整完整
2D/3D动画完整简化

为什么要学习 WPF

在 WPF 出现之前,Windows Forms、ASP.NET(Web Forms)等技术均使用“事件驱动”理念,这种由“事件->订阅->事件处理器”关系交织在一起构成的程序,尽管可以使用 MVC、MVP等设计模式,但一不小心就会使界面逻辑和业务逻辑纠缠在一起,造成代码变得复杂难懂、bug 难以排除。而 WPF 技术则是微软在开发理念上的一次升级——由“事件驱动”变为“数据驱动”。

事件驱动时代的数据是静态的、被动的;界面控件是主动的、界面逻辑与业务逻辑之间的桥梁是事件。而数据驱动正好相反,当数据发生变化时,会主动通知界面控件、推动控件展示最新的数据;同时,用户对控件的操作会直接送达数据,就好像控件是“透明的”。数据与界面之间的桥梁是数据关联(Data Binding),通过这个桥梁,数据可以流向界面,再从界面流向数据源。

其次,微软已经把 WPF 的理念扩展到了几乎全部开发平台,包括桌面平台、浏览器平台和手机平台。所以,学习 WPF 的发展前景非常好、回报很大,投入些经历是非常值得的。