如何使用 Smart Client Software Factory (SCSF) 和 Composite Application Block (CAB) – CSLA 项目跟踪器参考示例
解释如何使用 SCSF 和 CSLA 框架来创建一个强大且灵活的智能客户端。
引言
Smart Client Software Factory (SCSF) 的最新版本最近已发布。为了熟悉新版本,我采用了 CSLA 框架的参考示例,并将 Windows Forms 解决方案转换为使用 SCSF。但首先,需要一些背景信息。
SCSF 是一个强大的框架,我已成功使用它一段时间 – 请参阅 SuperSec。该框架的最新版本包含一些新功能,我想了解它们是如何工作的。尽管 SCSF 功能强大,但它并非适合胆小的人。学习曲线非常陡峭,但一旦掌握,它就非常易于使用且非常有效。
CSLA 框架是一种非常方便的方式来构建具有移动对象的客户端-服务器应用程序。许多人在 CSLA 论坛中提出了将 SCSF 与 CSLA 一起使用的问题,得到的答复是两者匹配良好。但是,任何想要弄清楚如何将 CSLA 与 SCSF 一起使用的人都只能靠自己。
因此,本文档试图展示如何将 Project Tracker (PT) 示例转换为使用 SCSF 运行。
背景
现在是警告!CSLA 框架的开发者 Rockford Lhotka 是一位非常聪明且能干的开发者。他的 PT 示例是一个非常好的编写智能客户端应用程序的方式。我不确定 SCSF 对该示例增加了多少价值。但当然,我们所要做的只是展示如何使用 SCSF!
此外,SCSF 带来了很多开销 – 很多开销!PT 示例看起来尤其傻。为了完成很少的事情而编写了大量的代码!最近关于 CAB 和 SCSF 用途的辩论非常有启发性,但在我看来,SCSF 是一个有价值的工具,我会坚持使用它,直到 Acropolis 出现为止。
本文档的其余部分将描述将 PT 示例转换为使用 SCSF 的步骤。如果您还没有下载 CSLA(以及 ProjectTracker
示例),请立即下载。如果您安装了 ProjectTracker
示例,则数据库将为您设置好。
Using the Code
源代码包含在此处。
以下是复制它的方法。
第一步 – 创建一个 SCSF 项目
显然,您需要安装 2007 年 5 月版本的 SCSF。
创建一个新的 SCSF 应用程序,并将其命名为 SCSFProjectTracker
。这将创建一个功能齐全的智能客户端解决方案。编译并运行它!
第二步 – 添加 Infrastructure.UI 模块
SCSF 提供了 PT 应用程序所需的大部分功能。然而,PT 应用程序使用了模态窗体。SCSF 参考实现包含一个有用的模块 - Interface.UI
- 它提供了我们所需的功能。只需复制此模块并更改命名空间。
第三步 – 修改布局模块以匹配 PT MainForm
PT 示例中没有菜单栏 – 所以删除它,并移除对 _mainMenuStrip
的引用。
将 PT MainForm
中的 ToolStrip
复制到 ShellLayoutView
,删除现有的 ToolStrip
,并将您复制的 ToolStrip
重命名为 _mainToolStrip
。
删除 Projects、Resources、Admin 和 Documents 下拉菜单中的所有 ToolStripItem
。在 ShellLayoutViewPresenter OnSet
方法中注册 Projects、Resources、Admin 和 Documents 下拉菜单以及 Login 标签和按钮。然后为 Login 按钮添加一个命令处理程序。
最后,从 SplitContainer
中删除 LeftWorkspace
,删除 SplitContainer
,并将 LeftWorkspace
停靠在 LayoutWorkspace
中。将其重命名为 _mainWorkspace
。
为了使应用程序能够编译,您需要设置 UIExtensionNames
、WorkSpaceNames
和 CommandNames
类中的名称。
为 ShellApplicationLayoutPresenter
添加两个事件处理程序:SetStatusBusy
和 CancelStatusBusy
。
为 DocumentActive
和 DocumentClosed
添加两个 EventHandler
,以便在编辑项目或资源时,您可以轻松地在视图之间切换。
添加对 Intrastructure.UI
项目的引用,在 Module
类中将 WindowsWorkspace
更改为 WindowsWorkspaceExtended
,并注册模态工作区。
最后,在 Infrastructure.Library
模块中创建一个服务 – ShellNotificationService
。它实现了 IMessageBoxService
,并提供了一种可测试的方式来为您的业务模块提供消息框功能。在 Infrastructure.Module
中注册该服务。
现在,所有您需要的 UI 元素都可供您的 SCSF 业务模块使用。
编译并运行应用程序。
第四步 – 添加 ProjectTracker.Library 和 CSLA 引用
为了使业务对象可供 UI 使用,请将 ProjectTracker.Library.dll 和 Csla.dll 复制到解决方案的 Lib 文件夹。现在,当我们需要引用业务对象时,可以从一个地方获取它们。访问 ProjectTracker
功能并管理与数据库交互的最佳方法是创建一个服务。
在 Infrastructure.Library
项目中创建一个服务 ProjectTrackerService
。该服务实现了 Infrastructure.Interface
项目中的 IProjectTrackerService
,以便所有模块都可以使用它。在 Infrastructure.Module
中注册该服务。
第五步 – 添加 LoginModule
您需要的第一个业务模块是用于管理用户登录的模块。
添加一个新的业务模块 - LoginModule
(无需 Interface 模块)。
此模块唯一需要的视图是 LoginView
。使用 SCSF Add View 模板添加一个 LoginView
。这时才开始有趣。LoginView
由三个部分类组成 - LoginView.cs、LoginViewDesigner.cs 和 LoginView.GeneratedCode.cs。我们现在也希望将业务逻辑与严格需要在 UI 中的代码分开。
登录过程被视为一个单独的 Workitem
,并由 LoginController
管理。同样,这可能有点过头,但它提供了一种简单的方式来创建视图,然后释放所有使用的资源。通常,用户只会登录一次,这样可以确保会话其余部分未使用的资源不会被挂起。
需要注意的一些事项。当用户登录或注销时,会触发一个事件,让其他模块知道登录状态已更改。PT 示例使用 StatusBusy
对象在状态栏中显示数据库操作正在进行的消息。这被替换为在数据库操作开始和结束时触发事件。
LoginView
在应用程序启动时(在 ModuleController
的 AddViews
方法中触发)显示,并且当用户单击登录按钮时显示。
第六步 – 添加 ProjectModule
使用 SCSF 添加一个业务模块 – ProjectModule
。
首先,将 ToolStripMenuItems
添加到 Project ToolStripDropDown
中,并在 ModuleController
中注册元素和命令。为了确保 ToolStripMenuItems
显示正确,请添加一个 ActionCatalogService
并注册一个通用操作条件 ProjectActionCondition
。这确保在登录和注销事件触发时显示正确的标签,并适当地启用和禁用菜单项。
此模块中有两个视图 – ProjectSelectView
和 ProjectEditView
。与我们在 LoginView
中所做的一样,使用 SCSF 模板创建这两个视图,并将代码从 PT 示例中迁移过来。
其他模块需要选择项目的功能。提供此功能的最优方式是使用服务 ProjectSelectService
。在 Infrastructure.Interface
中创建服务 IProjectSelectService
,并在 Infrastructure.Library
中提供实现。在 ModuleController
中加载该服务。
IProjectSelectService
提供了创建新项目、编辑现有项目或删除项目的方法。这是使 ProjectSelect
功能可供其他模块使用的最佳方式。
第七步 – 添加 ResourceModule
使用 SCSF 添加一个业务模块 – ResourceModule
。
创建 Resource 功能与在 ProjectModule
中使用的过程类似。
第八步 – 添加 Assign 功能
现在已经创建了 ProjectSelectService
和 ResourceSelectService
,可以在 ProjectEditViewPresenter
和 ResourceEditViewPresenter
中分别添加 Assign Resource 和 AssignProject
功能。
第九步 – 添加 AdminModule
接下来,添加 AdminModule
。它提供了一个视图 – RolesEditView
。
就是这样。这并不难做,而且确实展示了 SCSF 和 CAB 的价值。我可以独立测试这些模块,如果我们想添加更多功能,我们可以单独处理相应的模块。
要运行示例,请使用用户名和密码 – pm 和 pm,以及 admin 和 admin。
关注点
CAB 相关的开销在应用程序加载时才真正显现。原始的 ProjectTracker
应用程序几乎立即启动,而 SCSF 版本则需要几秒钟。此后,与其他大多数智能客户端应用程序一样,差异并不明显。
历史
- 2007 年 6 月 26 日:应用程序已发布