- 问题
通常一个客户端应用程序会包含许多不同类型的视图,这些视图从的各种部件或模块显示数据。例如,一个应用程序会并列显示客户列表与选中客户的详细信息。
- 解决方案
创建一个 Workspace (工作区) 层次结构,这个结构将客户端界面分割成多个嵌套的矩形区域,见图示一。在这个基于 Composite UI Application Block 的架构设计中,Workspace 是一个能够显示多个 View (视图) 的区域。
在图示一中,房地产系统的客户端分割成水平的两个Workspace (工作区):左工作区 A 和右工作区 B。右工作区又进一步分成两个更小的工作区:工作区 C 和工作区 D。
Figure 1
Hierarchy of workspaces
在基于 Composite UI Application Block 的客户端,工作区层次是通过一些 Workspace 和 View 的简单结构实现的。
Figure 2
Logical view of a workspace hierarchy
一个 View,可能是一个 Windows Form 或一个界面控件,包含一个或多个 Workspace,应用程序在运行时指示一个 Workspace 显示一个更小的 View,如果这个 View 包含有自己的 Workspace,它就会指示自己的那些 Workspace 再显示它们的 View。这个过程将在整个 Workspace 层次结构中持续进行。
有两种类型的 Workspace提供同时具有多个界面视图的功能,这些界面视图可以同时放置在同一位置,但其中只有一个界面视图根据需要显示为可视界面。这两种类型的 Workspace分别是 DeckWorkspace 和 TabWorkspace。
一个 View 中的多个Workspace 通常是通过一些的垂直或水平的分隔条来分割的,用户就可以在运行时调整宽度或高度。
Workspace Hierarchy 模式具有非常大的界面管理的弹性。你可以创建一个内含一组 Workspace 的 Layout View (布局视图),应用程序能够将其他 View 加载到这些 Workspace 中,只要改变 Layout View,你就可以改变客户端的显示方式。
- 职责
Workspace 必须放置在 WorkItem (工作项) 容器中,这就意味着你要考虑到 Workspace 和 View 在容器层次结构中的可见性问题。仅当一个 Workspace 对一个 View 可见的时候,应用程序才能将这个 View 显示在那个 Workspace 中,这个规则对 View 属于不同的 Module (模块) 也是有效的,因为在一个 Module 中的一个 View 要对它所属的 Workspace 在另外一个 Module 中的另外一个 View 中也有效,第一个 View 必须放置在根结点的 WorkItem 中。
- 示例
举例说明一个 Workspace 的层次结构,请参见 Smart Client Software Factory 参考实现项目中的 ShellForm 类。这个 ShellForm 定义了两个 Workspace:_leftWorkspace 和 _rightWorkspace,AppraiserWorkbenchModule 模块将 MyAppraisalsView 视图加载到 _leftWorkspace 中,然后将 AppraisalDetailView 视图加载到 _rightWorkspace 中。
- 更多信息
这个模式是基于 Container Hierarchy 模式的。