使用WPF构建复合应用程序的模式

本文将介绍以下内容:

复合应用程序基础知识

引导程序和模块初始化

区域和 RegionManager

视图、命令和事件

本文使用了以下技术:

WPF 复合应用程序指南

内容

问题:单一应用程序

复合应用程序

复合应用程序指南

引导程序和容器

模块初始化

使用引导程序

模块和服务

区域和 RegionManager

本地作用区域

视图

单独的表示

命令

事件

结束语

Windows Presentation Foundation (WPF) 和 Silverlight 等技术为开发人员提供了一种简单的声明性方法,使他们可以快速轻松地开发出具有丰富用户体验的应用程序。但是,尽管这些技术有助于进一步将表示层从逻辑层中分离出来,但它们无法解决如何构建易于维护的应用程序这一老问题。

对于一些较小的项目,具备一定经验的开发人员应该能够设计和构建出便于进行维护和扩展的应用程序,此要求并不过分。但是,随着移动部件的数量(以及使用这些部件的人员)的不断增加,对项目实施控制的难度开始呈指数级增长。

复合应用程序是专门针对此问题提出的解决方案。在本文中,我将对复合应用程序的定义进行解释,并说明如何才能构建一个利用 WPF 功能的复合应用程序。随后,我还会为您介绍 Microsoft 模式和实施方案小组提供的全新 WPF 复合应用程序指南(以前的代号为 "Prism")。

问题:单一应用程序

让我们通过一个示例来了解复合应用程序的需求。Contoso Financial Investments 提供了一个应用程序用来管理股票投资组合。借助此应用程序,用户可以查看当前的投资以及与这些投资相关的新项目,还可以将新项目添加到观察列表以及执行购买/销售交易。

如果将其构建成具有用户控件的传统 WPF 应用程序,首先应构建一个顶层窗口并针对上述各个功能添加用户控件。在这种情况下,您需要添加以下用户控件:PositionGrid、PositionSummary、TrendLine 和 WatchList(参见图 1)。在设计过程中,各个用户控件都通过在 XAML 中手动操作或使用设计器(如 Expression Blend)等方式排列在主窗口中。

图 1 单一应用程序中的用户控件

然后,使用 RoutedEvents、RoutedCommands 和数据绑定将所有内容连接起来。有关此主题的详细信息,请参阅 Brian Noyes 在本期撰写的文章“了解 WPF 中的路由事件和命令” (msdn.microsoft.com/magazine/cc785480)。Position­Grid 有一个相关联的 RoutedCommand 可供选择。在命令的 Execute 处理程序中,只要选择了某个位置就会发生 TickerSymbol­Selected 事件。TrendLine 和 NewsReader 被连接在一起,以侦听 TickerSymbolSelected 事件并根据所选的股票代号呈现相应的内容。

在这种情况下,应用程序与每个控件都紧密耦合在一起。UI 中存在大量用于协调各个部分的逻辑。控件之间还存在着相互依赖关系。

由于存在这些依赖关系,因此无法通过某种简单的方法将应用程序分解成可在其中分别开发各个不同部分的窗体。虽然可以将所有用户控件都放在一个单独的程序集中以提高可维护性,但这种做法只是将问题从主应用程序转移到了控件程序集,治标不治本。在这种模型中,进行重大更改或引入新功能都非常困难。

现在,让我们增加两个新业务需求以使问题变得更复杂一些。第一个需求是添加一个基金债券屏幕,当双击某个基金时它会显示有关所选基金的个人债券。第二个需求是添加一个新屏幕,显示与所选基金相关的超链接列表。由于时间有限,这些功能必须由不同的团队并行开发。

每个团队都开发单独的控件:FundNotes 和 FundLinks。要将这两个控件添加到相同的控件程序集,必须将它们添加到控件项目中。更重要的是,必须将其添加到主窗体中,这意味着每个控件中对代码和 XAML 的更改都必须合并到主窗体中。此类操作可能会非常脆弱,尤其是对已有的应用程序。

如何将所有更改都应用到主应用程序中?要完成此任务,您可能需要花费大量的时间在源控件中执行合并和拆分操作。如果在应用变更时出错或意外覆盖了某些内容,应用程序就会遭到破坏。补救方法是重新考虑应用程序设计。

时间: 2016-11-01

使用WPF构建复合应用程序的模式的相关文章

DB2 9和ASP.NET 2.0构建下一代应用程序

简介 本教程描述了使用具有ASP.NET 2.0主从复合关系增强的DB2的益处.过去,通过连接两个数据网格来支持主从复合关系通常很困难,但是现在,借助Visual Studio 2005和ASP.NET 2.0,只需使用合适的控件就能构建主从复合关系应用程序. 本教程演示如何在不编写代码的情况下构建主从复合应用程序.不必编写代码,我们使用ASP.NET 2.0中的Grid View和Details View控件构建一个示例应用程序,其功能是显示一个公司特定部门的职员. 为何使用支持ASP.NET

eSWT移动扩展简介,第1部分: 使用简单小部件快速构建移动应用程序

简介 随着移动平台变得越来越复杂,移动计算需求将会不断增长.嵌入式 Standard Widget Toolkit (eSWT) Mobile Extension 是一种 Eclipse 技术,可以用于为各种移动电话开发具有本地外观的 Java 应用程序. eSWT 是嵌入式 Rich Client Platform (eRCP) 项目的一部分,为构建移动应用程序提供标准的嵌入式小部件.eSWT 主要关注如何满足移动设备的功能和用户体验需求.eSWT 提供了对设备上的用户界面功能的高效.可移植的

构建 Android 应用程序一定要绕过的 30 个坑

本文讲的是构建 Android 应用程序一定要绕过的 30 个坑, 学习领域有两类人 - 一类是那些通过艰苦努力一步一步学习的人,一类是学习别人的经验教训走捷径的人.在此,我想分享一些自己的经验给大家: 添加使用第三方依赖库前,请再三思考,它绝对是一个慎重的决定; 如果用户看不见有些界面, 请一定不要绘制它!; 除非真的需要,否则不要使用数据库; 应用程序中 65k 方法数的限制很快就能达到,我意思是真的很快!不过 multidexing 能拯救你; RxJava 是对 AsyncTask 和其

构建富客户端程序 GWT2.3 + Guice3.0 + hibernateJPA 程序代码

  构建富客户端程序 GWT2.3 + Guice3.0 + hibernateJPA 程序代码. Created Thursday 05 May 2011 gwt2.3 是开发 web2.0 的最理想的技术框架. 但只有 MVC中的 显示 和控制. 而模型这部分 没有给出 相关的实现. 用 spring + hiberante 倒是可以.但是 太过重量级的了.本来 web2.0就是应该快速的. 用上 spring 的IOC 反而感觉会慢点了.启动慢,加载慢.所以选择了一个轻量级的IOC-gui

构建富客户端程序 GWT2.3 + Guice3.0 + hibernateJPA 程序代码。

构建富客户端程序 GWT2.3 + Guice3.0 + hibernateJPA 程序代码. Created Thursday 05 May 2011 gwt2.3 是开发 web2.0 的最理想的技术框架. 但只有 MVC中的 显示 和控制. 而模型这部分 没有给出 相关的实现. 用 spring + hiberante 倒是可以.但是 太过重量级的了.本来 web2.0就是应该快速的. 用上 spring 的IOC 反而感觉会慢点了.启动慢,加载慢.所以选择了一个轻量级的IOC-guice

如何构建移动应用程序,从客户关系管理系统中检索信息?

公司正在努力削减成本,提高生产力和迅速提供新功能,以便获得最大数量的用户和市场.云计算和移动是帮助您满足这些需求的两大技术驱动要素.正因如此,IBM 将 Worklight(一个移动企业应用程序平台)和 IBM WebSphere Cast Iron(一个云集成解决方案)一起放在 IBM Mobile Foundation 中,提供了一个全面的端到端解决方案来构建.连接.管理和保护您的移动企业.IBM Endpoint Manager for Mobile Devices 是 IBM Mobil

JSF 1.2入门,第1部分 构建基本应用程序

简介:JavaServer Faces(JSF)技术是一种服务器端框架,它提供一种基于组件的 Web 用户 界面开发方式.JSF 1.2(集成在 Java Enterprise Edition 5 中)纠正了 JSF 的一些缺陷并添加了一 些出色的特性.这个教程系列讨论如何使用 JSF 1.2.本系列偏重示例,较少解释理论 - 这是为 了帮助您尽快开始使用 JSF. 开始之前 关于本系列 这个教程系列讨论 JavaServer Faces(JSF)技术的基础知识.JSF 是一种用于 Java W

用Ext JS构建Ajax应用程序:一种用于富因特网应用程序开发的JavaScript框架

简介:Ext JS 是一种强大的 JavaScript 库,它通过使用可重用的对象和部件简化了 Asynchronous JavaScript + XML(Ajax)开发.本文介绍 Ext JS,概述它背后的面向对象 JavaScript 设计概念,解释如何使用 Ext JS 框架开发富因特网应用程序的用户界面元素. 当今有许许多多的 Web 开发框架,开发人员很难判断哪些框架值得花时间去学习.Ext JS 是一种 JavaScript 开发框架,这种强大的 JavaScript 库通过使用可重

使用Grails构建富Internet应用程序,第1部分:使用Grails和Flex构建Web应用程序

简介:富 Internet 应用程序(Rich Internet Applications,RIA)通过浏览器保证桌面应用程序 的动态性和功能.RIA 的主要特征之一就是将表示层移动到客户机,并使用服务器上健壮的 RESTful 服 务层支持它.这种想法借助 SOUI(Service Oriented User Interface)和 SOFEA(Service Oriented Front End Architecture)之类的热门词汇得到传播. 关于本系列 这个系列探索一些应 用程序架构,