c# - CAB 与 Prism 的比较

标签 c# wpf winforms prism cab

我有需要重写的 Winform。我知道我们在 WPF 中有 Prism。对于经历过这两种框架的人来说,这两个框架之间的重要区别是什么?我是一名 CAB 程序员,所以我已经习惯了 CAB 事件连接。

此外,Prism 是否适用于 Winforms? CAB 是否适用于 WPF?

最佳答案

我都用过,使用 CAB 编写企业级应用程序,然后使用 PRISM(针对 winforms,而不是 WPF)重写它。

PRISM 不适用于开箱即用的 winforms,你必须破解各种东西,比如区域管理器,但一些复合的东西会起作用(比如 Unity 或事件聚合)。它确实需要相当多的工作,(所有 PRISM 源代码都是免费提供的)但是有一些开发人员已经写了关于如何开始的博客。 一些例子: http://briannoyesblogwp.azurewebsites.net/2008/10/13/composite-extensions-for-windows-forms/ http://blogs.msdn.com/b/gblock/archive/2008/10/20/bringing-prism-to-winforms.aspx

CAB 是否适用于 WPF...您为什么要尝试找出答案? CAB 非常古老,很难学习,因为做简单的事情非常复杂(学习曲线非常显着)并且内存使用率非常高。 CAB 的目标之一是允许开发人员编写解耦软件——但对框架“东西”的依赖太多,以至于它几乎全面失败。我知道您是一名 CAB 开发人员,成为一名 CAB 开发人员是一项不小的成就,因为需要花费大量的时间、精力和学习才能成功地使用 CAB 编写应用程序(我知道,我经历过!),但在转到 PRISM 之后,我不会用驳船杆碰 CAB。

当我们迁移时,我们使用了 MVP(MVVM 刚刚被发明,所以我们不想走那条路,因为它太未经测试了!),并且在很大程度上它运作良好。将 PRISM 用于 winforms 意味着我们失去了可以通过 WPF 获得的所有良好数据绑定(bind) - 但我们使用第三方工具为我们处理绑定(bind)(有很多这样的工具 - telerik 是一个例子,虽然不是我的那个)实际使用)。

如果您处于能够重写应用程序的情况 - 您可能会发现几乎不可能直接移植到 PRISM。迁移时,我们的应用程序中有 30 个表单,由于将旧的 CAB 内容硬塞进 PRISM 的工作量很大,我们最终只能重新创建所有表单。回想起来——我们真的应该硬着头皮迁移到 PRISM 的 WPF 实现,因为我们现在依赖旧的过时技术来填补 WPF 可以免费提供给我们的空白(比如数据绑定(bind))。如前所述,我们没有这样做,因为 WPF 和 MVVM 都太新了,对我们的利益相关者来说风险太大,但现在它们已经是相当成熟的技术/模式——我真的认为这是要做的事情,而不是改造您的框架 (PRISM) 以使用 Winforms。

所以 - 主要区别: 出租车

  1. 旧的,不受支持的
  2. 非常陡峭的学习曲线,因此难以维护(考虑需要让新的开发人员使用它)

WPF

  1. 新的、受支持的并正在积极维护/扩展
  2. 有很多很多示例 - 可能很难学习 - 但有很多熟悉该技术的开发人员和大量可用的支持
  3. 特定于 WPF - 您可以获得开箱即用的 2 种方式绑定(bind),声明式表单设计(比 winforms 强大得多)
  4. 特定于 Winforms - PRISM 促进了代码与 UI 的更好分离,因此您的项目变得更易于测试且错误更少。

如果您想直接从马山上获得信息,请阅读:http://compositewpf.codeplex.com/releases/view/16941 - 这是一份将 CAL 与 CAB 进行比较的文档,并详细解释了为弥补 CAB 的缺点所做的工作。

关于c# - CAB 与 Prism 的比较,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21513334/

相关文章:

c# - 如何确定 MethodInfo 是否是基方法的重写

c# - 光标应该在 "try"之前还是之后更改,为什么?

c# - 窗体最大化时自动缩放子控件

c# - 主进程在启动另一个线程后被卡住

wpf - 不合理的 WPF DataGrid 加载时间

c# - 如何在 WPF 中获取 ListView 的选中行值

c# - 从整数初始化 BitArray

c# - 从C#中的字符串中删除字符串

c# - SQL Server - 注册在尝试完成事务时要运行的用户代码

c# - XAML 绑定(bind)到带有参数的静态方法