在MVC模式下的UI AOP用例
设计时期程序结构
除了构件-站点-容器程序结构,还有一些额外的方面,这些额外的方面组成一个含有丰富功能的平台,为构件提供进步了的设计时期支持。对于RAD工具,这一点是非常重要的,而且这一点对于提高程序员生产力也非常重要。如果开发者想成功的话,专业构件应该为开发者提供一个丰富的设计时期经验。
通过Attributes,这些额外的功能被补充到构件。属性的每一个类型为构件指定一个不同的设计时期(其中一些是运行时期)功能。这个集成开发环境在两方面使用这些属性:设计图面以及它与代码后置的档案和属性浏览器的交流。注意:我们刚才所说的设计图面,不仅仅是指Windows 或者是Web Forms的设计图面,而且也指它们下面的构件,无论什么时候,当设计器访问非可视构件时,此构件是可视的。
大部分设计时期功能都包含在System.Design.dll程序集,下面的图片显示了设计时期属性的类型以及它们的用途。

在这个图表中没有显示更加一般的属性,例如:DescriptionAttribute, CategoryAttribute以及其它一般属性,这些属性提供一些限制的功能,这些属性主要被属性浏览器使用。然而,这里还有一些其它属性,这些属性为构件增添了一些更复杂的更好利用的特点,因为它们非常特殊,所以没有显示它们。当我们讨论到更高级的方案时将引用这些属性。
这三个属性中,每一个属性都将另一个相联系的类型与构件连接起来。DesignerAttribute连接一个类型,此类型直接或者间接地执行System.ComponentModel.Design.IDesigner (例如:System.ComponentModel.Design.ComponentDesigner, System.Web.UI.Design.HtmlControlDesigner 或者System.Windows. Forms.Design.ControlDesigner).对于从System.ComponentModel.TypeConverter派生而来的类型,以及从System.Drawing.Design.UITypeEditor派生来的类型,TypeConverterAttribute对它们做同样的事情。
下面分类中的这些属性是根据它们提供的设计时期增强层来分类的。
• 基本层:图中没有包含这些属性
• TypeConverter and Editor attributes. 中间层:TypeConverter和Editor属性
• 高级层:Designer属性
我们没有采用这个分类,因为许多属性允许提供简单的以及高级的设计时期功能。在文章的末尾,一切都会变得相当清晰。通过三个属性(以及相关联的类)提供了下面这些功能:
• Designer:与设计器宿主相交流,提供不同的设计功能。在System.ComponentModel.Design.ComponentDesigner类型中。可以找到设计器提供的共同功能,此共同功能通常是设计器的基类型。例如:这里有成员把构件中的改变告知宿主,过滤宿主和属性浏览器将看到的属性。
更加具体的功能需要依靠设计器的类型,而设计器类型则依靠设计器附属的构件类型。因此,System.Windows. Forms.Design.ControlDesigner(所有Windows Forms控件的基本类型)处理控件和它的子控件之间的麻烦事情,拖曳操作,鼠标移动等其它事情。另一方面,System.Web.UI.Design.ControlDesigner(所有Web Forms控件的基本类型)负责发送HTML,在设计时期显示控件,并且负责执行页面源(.aspx file)控件状态的持久性,以及显示错误等等。
设计器通常处理设计时期内应用到构件整个生命周期的功能,而且设计器是程序结构中更加灵活的部分。
0
相关文章