学习完本章,你将掌握:
1.理解过程式(imperative)工作流模型和声明式(declarative)工作流模型之间的主要区别
2.创建声明式工作流
3.使用XAML XML词汇来创建工作流
4.调入基于XAML的工作流并执行
许多开发者或许并不知道WF既能用基于过程化的定义来执行工作流(使用工作流视图设计器)也能用基于声明式的定义来执行工作流(工作流使用XML来进行定义)。
每一种风格都有优点。当你使用我们贯穿本书已使用过的技术来创建你的工作流应用程序的时候,工作流模型实际上是被编译进了一个可执行的程序集中。其优点是加载、执行工作流的速度快。
但这种风格也缺乏灵活性。尽管有为WF加入动态能力的办法(这不包括在本书中),但通常你的工作流仍然要由你去编译它们。假如你的业务处理逻辑变化了的话,除非你为工作流中的判定使用了声明性规则(在第12章“策略和规则”中讨论过),否则的话你将不得不修改你的工作流定义,重新进行编译和部署,此外还伴随着去执行所有相关的测试和验证工作。
但是,工作流运行时有能力接受几乎任何形式的工作流定义。你以前还不得不去写一些代码来把你提供的工作流定义转化成工作流运行时能够执行的模型。事实上,这些正是WF处理基于XML的工作流定义所要做的事。
正如你可能期望的,把你的工作流记录进一个XML格式的文件中,这能让你很容易地修改和重新部署。这就不用在Microsoft Visual Studio中重新编译你的工作流,你可简单地使用任何XML编辑器(甚至是Windows中的“Notepad”记事本程序)来修改基于XML的工作流定义并把它创建的工作流模型提供给工作流运行时。你甚至能有两全其美的办法:通过使用WF的工作流编译器来编译你的XML工作流定义。我们将在本章探讨这些内容。
声明式工作流——XML标记
首先,.NET 3.0中的声明式应用程序(它包括WPF)的定义有着悠久的历史。WPF开始提供声明式编程的能力,它既可完全地进行声明化也可进行部分声明。你可完全地使用像XML应用程序标记语言或者XAML(读作“zammel”)中的XML标记词汇来封装你的应用程序。或者,通过使用特殊的基于XAML的结构,你能把你应用程序的某部分编译进程序集中并通过XAML来把它调入执行。你甚至能写下C#代码并把它嵌入到你的XAML定义中,或者把你的C#代码放进代码后置文件中,以便稍后执行它。
备注:你不能找到比Charles Petzold的最新著作:“应用程序 = 代码 + 标记”(“Application = Code + Markup”,2006年微软印刷)更好的在XAML和WPF方面的专著了。假如你对XAML论题的详细细节感兴趣的话,强烈建议你重新看看本书的第19章。
做下面的这个实验其实只是为了好玩。在你的系统中创建一个新的文本文件,把它命名为Button.xaml。把列表16-1中的代码输入到该文件中并进行保存,然后双击该文件。因为你必须安装.NET 3.0组件才能创建工作流应用程序,因此其实你也已经完成了对.xaml类型文件的注册工作。Windows知道把XAML文件加载到你的Web浏览器并显示它。尽管它仅仅只有一个按钮,但这是一个完整的WPF应用程序,虽然它很简单。图16-1显示了使用Window XP中的IE 7.0来展示该按钮的输出效果。
<?xml version="1.0"?><Button xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" Margin="36" Foreground="Blue" FontSize="36pt"> Hello,World!</Button>
列表16-1展示一个按钮的基于XAML的应用程序示例
图16-1正在运行的基于XAML的按钮
WF团队也把这些理念一起融入到了WF中。虽然WF的XML遵循XAML命名空间的约定,但包含和WF相关的XML的文件名通常都使用.xoml文件扩展名来进行命名。这种做法能让自动化工具把该文件解释为一个工作流文件而不是一个外观(presentation)文件。事实上,我们将在本章中使用的一个工具,它叫工作流编译器(wfc.exe),在创建基于XAML的工作流时它要求使用.xoml类型的文件。
尽管列表16-1不是对工作流的声明,但要仔细看看你看到的XML。注意该XML元素的名称和.NET WPF类中支持的名称是相同的,在本例子中它是Button。还值得一提的是该按钮的属性将由XAML文件进行解释,它们是:FontSize,Margin和Foreground。通过改变这些属性或者添加其它属性,我们能非常容易地修改该按钮的特性。
基于工作流的XAML文件也有同样的特点。XML元素的名称代表了像CodeActivity或者IfElseActivity之类的活动类型。和你可能期望的一样,每一个元素能够包含它们的属性以及它们的值。至于工作流的结构,组合活动将会有子XML元素,而基本活动则没有。
以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索xml
, 文件
, xaml
, 应用程序
, 工作流
, #工作流
基于
,以便于您获取更多的相关知识。