65.9K
CodeProject 正在变化。 阅读更多。
Home

如何使用 Smart Client Software Factory (SCSF) 和 Composite Application Block (CAB) – CSLA 项目跟踪器参考示例

starIconstarIcon
emptyStarIcon
starIcon
emptyStarIconemptyStarIcon

2.65/5 (10投票s)

2007 年 6 月 26 日

CPOL

7分钟阅读

viewsIcon

105857

downloadIcon

2811

解释如何使用 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

为了使应用程序能够编译,您需要设置 UIExtensionNamesWorkSpaceNamesCommandNames 类中的名称。

ShellApplicationLayoutPresenter 添加两个事件处理程序:SetStatusBusyCancelStatusBusy

DocumentActiveDocumentClosed 添加两个 EventHandler,以便在编辑项目或资源时,您可以轻松地在视图之间切换。

添加对 Intrastructure.UI 项目的引用,在 Module 类中将 WindowsWorkspace 更改为 WindowsWorkspaceExtended,并注册模态工作区。

最后,在 Infrastructure.Library 模块中创建一个服务 – ShellNotificationService。它实现了 IMessageBoxService,并提供了一种可测试的方式来为您的业务模块提供消息框功能。在 Infrastructure.Module 中注册该服务。

现在,所有您需要的 UI 元素都可供您的 SCSF 业务模块使用。

编译并运行应用程序。

第四步 – 添加 ProjectTracker.Library 和 CSLA 引用

为了使业务对象可供 UI 使用,请将 ProjectTracker.Library.dllCsla.dll 复制到解决方案的 Lib 文件夹。现在,当我们需要引用业务对象时,可以从一个地方获取它们。访问 ProjectTracker 功能并管理与数据库交互的最佳方法是创建一个服务。

Infrastructure.Library 项目中创建一个服务 ProjectTrackerService。该服务实现了 Infrastructure.Interface 项目中的 IProjectTrackerService,以便所有模块都可以使用它。在 Infrastructure.Module 中注册该服务。

第五步 – 添加 LoginModule

您需要的第一个业务模块是用于管理用户登录的模块。

添加一个新的业务模块 - LoginModule(无需 Interface 模块)。

此模块唯一需要的视图是 LoginView。使用 SCSF Add View 模板添加一个 LoginView。这时才开始有趣。LoginView 由三个部分类组成 - LoginView.csLoginViewDesigner.csLoginView.GeneratedCode.cs。我们现在也希望将业务逻辑与严格需要在 UI 中的代码分开。

登录过程被视为一个单独的 Workitem,并由 LoginController 管理。同样,这可能有点过头,但它提供了一种简单的方式来创建视图,然后释放所有使用的资源。通常,用户只会登录一次,这样可以确保会话其余部分未使用的资源不会被挂起。

需要注意的一些事项。当用户登录或注销时,会触发一个事件,让其他模块知道登录状态已更改。PT 示例使用 StatusBusy 对象在状态栏中显示数据库操作正在进行的消息。这被替换为在数据库操作开始和结束时触发事件。

LoginView 在应用程序启动时(在 ModuleControllerAddViews 方法中触发)显示,并且当用户单击登录按钮时显示。

第六步 – 添加 ProjectModule

使用 SCSF 添加一个业务模块 – ProjectModule

首先,将 ToolStripMenuItems 添加到 Project ToolStripDropDown 中,并在 ModuleController 中注册元素和命令。为了确保 ToolStripMenuItems 显示正确,请添加一个 ActionCatalogService 并注册一个通用操作条件 ProjectActionCondition。这确保在登录和注销事件触发时显示正确的标签,并适当地启用和禁用菜单项。

此模块中有两个视图 – ProjectSelectViewProjectEditView。与我们在 LoginView 中所做的一样,使用 SCSF 模板创建这两个视图,并将代码从 PT 示例中迁移过来。

其他模块需要选择项目的功能。提供此功能的最优方式是使用服务 ProjectSelectService。在 Infrastructure.Interface 中创建服务 IProjectSelectService,并在 Infrastructure.Library 中提供实现。在 ModuleController 中加载该服务。

IProjectSelectService 提供了创建新项目、编辑现有项目或删除项目的方法。这是使 ProjectSelect 功能可供其他模块使用的最佳方式。

第七步 – 添加 ResourceModule

使用 SCSF 添加一个业务模块 – ResourceModule

创建 Resource 功能与在 ProjectModule 中使用的过程类似。

第八步 – 添加 Assign 功能

现在已经创建了 ProjectSelectServiceResourceSelectService,可以在 ProjectEditViewPresenterResourceEditViewPresenter 中分别添加 Assign Resource 和 AssignProject 功能。

第九步 – 添加 AdminModule

接下来,添加 AdminModule。它提供了一个视图 – RolesEditView

就是这样。这并不难做,而且确实展示了 SCSF 和 CAB 的价值。我可以独立测试这些模块,如果我们想添加更多功能,我们可以单独处理相应的模块。

要运行示例,请使用用户名和密码 – pm 和 pm,以及 admin 和 admin。

关注点

CAB 相关的开销在应用程序加载时才真正显现。原始的 ProjectTracker 应用程序几乎立即启动,而 SCSF 版本则需要几秒钟。此后,与其他大多数智能客户端应用程序一样,差异并不明显。

历史

  • 2007 年 6 月 26 日:应用程序已发布
© . All rights reserved.