代码改变世界

《WF编程》系列之7 - 工作流编写方式:对象及其关系

2007-04-04 14:50  Windie Chai  阅读(4172)  评论(1编辑  收藏  举报

2.2对象及其关系

工作流最终会变成内存中的一组托管对象.这些对象之所以能够依照我们的构思来执行,是因为我们用一种关系把它们组织到了一起.不仅是工作流,看看一些Windows应用程序的代码:

button1 = new System.Windows.Forms.Button();

button1.Location 
= new System.Drawing.Point(1313);

button1.Name 
= "button1";

button1.Size 
= new System.Drawing.Size(7523);

button1.Text 
= "Click Me!";

this.Controls.Add(this.button1);

这段代码是不是和InitializeComponent方法中的代码很像呢? InitializeComponent组织了一系列活动,而这段代码则组织UI控件:创建了一个Button并设置了一些外观属性.这段代码包含在一个继承自System.Windows.Forms.Form的类中.代码中最重要的一行是将Button添加到Form的控件集中:this.Controls.Add(this.button1).如果我们不去确定Form和Button之间的关系, 则Button永远不会在Form上显示.

大概我们不会自己动手写这样的代码,因为设计器会帮我们生成.设计器生成的代码有两个目标.首先是初始化对象并设置它们的初始值.然后确定并构造新对象之间的关系.

ASP.NET设计器为Web Form生成的代码也有两个相同的目标,但是”看”起来有一点不同:

 

    <asp:Panel runat="server" ID="panel1">

        
<asp:Button runat="server" ID="button1" Text="Click Me!" />

    
</asp:Panel>

ASP.NET设计器使用定义性标记来替代命令性代码.这样做的原因是定义性标记具有混合.NET对象和HTML的能力,而且HTML本身就是定义性语言.再者,定义性风格可以增长生成代码的可读性.我们可以很轻松的看出Button是Panel的子对象.

Windows Presentation Foundation和Windows Worklow使用另外一种定义性标记语言:XAML.

<Grid>

  
<Button Grid.Row="0" Grid.Column="0">

    Click Me!

  
</Button>

</Grid>

XAML也是有效的XML.上面的XAML演示了人读化(Human readable)和工具化(Tool-able)的定义性语言风格(很容易看出Button是Grid的子控件).工具化是指我们可以不借助设计器和编译器来读,写,修改并处理标记,我们可以为特定的任务编写自定义工具,也可以使用各种现有的XML技术,例如XPath, XQuery, XSLT和XML DOM等.