我自己的一生

是你的,是我的,到底是谁的?

导航

 

设计表现层

表现层包含的一些组件,是赋予用户和应用程序交互的能力。许多简单的表现层包含用户界面组件,如,Window Form或者ASP.NET Web Form。更复杂的用户交互,你需要设计用户处理组件,来编排用户界面元素和控制用户交互。当用户交互跟进的是一个可预知的步骤流时,用户处理组件就特别有用,比如,一个完成任务的向导。图2.2展现了表现层的组件类型。

 

2.2 表现层

 

在如零售应用程序的情况下,需要两个用户界面:一个是有用户使用的电子商务Web站点;另一个是销售代表使用的基于Windows Form的用户界面。这两种类型用户通过这些用户界面会执行相同的任务。比如,这些用户界面必须提供可以浏览有效的产品,增加产品到购物篮,作为校验的一部分,需要提供指定的支付明细。这些处理可以被抽象在隔离的用户处理组件中,使应用程序更容易维护。

 

设计用户界面组件

你可以使用许多方法实现用户界面。例如,在零售应用程序中,需要一个基于WEB的用户界面和基于Windows的用户界面。其它类型的用户界面,包括音频频谱,基于文档的程序,移动客户端应用程序,等等。用户界面组件负责和用户交互。它们显示数据给用户,从用户那里获取数据,解释用户引发作用于业务数据的事件,改变用户界面的状态,或者在用户的任务中,帮助他向下执行。

 

用户界面通常有大量的元素组成,这些元素附着在一个页面或者窗体上,显示数据和接受用户的输入。例如,一个基于Windows的应用程序包含一个DataGrid控件,它显示产品种类列表;一个按钮控件,用于表明在选择的产品种类下,用户想查看产品。当一个用户和一个用户界面元素交互时,一个事件被触发,会调用控制器功能中的代码。依次推导,控制器功能会调用业务组件、数据访问组件,或者用户处理组件,实现期望的行为和获取被显示的必要数据。然后,控件器功能刷新对应的用户界面元素。图2.3显示了一个用户界面的设计。

 

 

2.3 用户界面设计

 

用户界面组件的功能性

用户界面组件必须显示数据给用户,获取和验证用户输入的数据,解释用户的动作在数据上执行的操作。另外,用户界面要过滤有效的行为,让用户仅执行适合于当时的某些点上的操作。

 

用户界面组件:

不需要发起,参与,或者决定事务。

如果他们需要显示它的数据或者它的状态是有效的,和当前用户有关的处理组件被引用。

可以封装视图功能和一个控制器。

 

当接收用户输入时,用户界面组件:

从用户那里获取数据,提供可视化的暗示(比如,工具提示)帮助输入,为执行的任务进行验证和适当的控制。

从用户那里捕获事件,调用控制器功能,告诉用户界面组件显示的数据发生了改变,这个改变可以在当前用户处理处发起一个行为,或者改变当前用户处理的数据。

约束用户可能输入的类型。例如,一个“数量”的字段限制用户必须输入数字值。

执行数据输入验证,例如,通过验证值的范围,可以保证输入的是一个特定域范围,或者保证输入的是强制性的数据。

对信息执行简单的映射和转换,转换被用户控制的值和控件下面可以执行的值(例如,用户界面组件显示一个产品名称,而不是组件里的产品ID)。

解释用户动作(诸如,一个“拖拉”操作或者一个按钮“单击”),且调用控制器功能。

可以使用有效的组件进行缓存。在ASP.NET中,你可以在用户界面组件输出上指定缓存,避免每次重新绘制。如果你的应用程序包含的可视化元素和很少发生改变的数据有关,且不需要事务处理这些内容,你可以缓存它们,这些元素可以被大量的用户共享。你也可以缓存这些元素,提供给大量的用户共享。

可以使用有效的组件进行分页。一般情况下,特别是WEB应用程序,在一个页面中显示一个很长的数据列表时,使用分页。通常情况下,会有一个“helper”组件来做相关工作,这个组件跟踪用户当前运行的页面,从而调用数据访问逻辑组件的“分页查询”功能,这个功能需要“helper”提供当前页和一页需显示数据列数的数据值。分页和用户处理组件没有发生交互。

 

 

当展现数据时,用户界面组件:

从业务组件或者数据访问逻辑组件获取数据,且展现数据。

执行数据值得格式化(比如,格式化合适的日期格式)。

在展现数据上执行任意的本地化工作(例如,在Grid里面,使用资源中的字符显示列的头,使其和当前的语言保持一致)。

具有代表性地,展现数据也适合于业务组件。通常,这些业务实体来源于用户处理组件,但,也可能从数据组件获取。如果一个实体已经有效,UI组件可以通过数据绑定展现数据,绑定到他们显示需要的合适属性和实体组集合。如果你正在管理的数据如DataSet一样,数据绑定非常简单。如果是你已经实现的自定义实体对象,你需要用一些额外的代码实现来提供数据绑定。

提供用户所处在的状态信息,例如,指示应用程序处在“断线“或者处在”连线“模式下。

可以使用有效的组件提供回撤功能。许多应用程序需要让用户取消某些操作。通常下,这个执行需要提供一个保存一个固定长度的堆栈,保存“老数据值新数据值”。这些数据可能是指定的数据项或者全部的实体。当操作和一个业务处理有关时,你不能把一个补偿作为一个简单的回撤功能看待,而是要看作是一个另外的操作。

可以使用一个有效的组件提供剪贴板功能。在许多基于Windows的应用程序中,为分等级的数据值提供剪贴板的功能是很有用的----例如,你可以让你的用户拷贝和粘贴全部的客户对象。这样的功能通常实现的方法是:通过放置XML字符到剪贴板;如果剪贴板是一个应用程序内的,通过一个全局对象来保持数据在内存中。