【问题标题】:Comparison between CAB vs PrismCAB 与 Prism 的比较
【发布时间】:2014-02-26 02:40:11
【问题描述】:

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

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

【问题讨论】:

    标签: c# wpf winforms prism cab


    【解决方案1】:

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

    PRISM 不适用于开箱即用的 winform,您必须破解诸如区域管理器之类的各种东西,但某些复合材料会起作用(例如 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 获得的所有漂亮数据绑定 - 但我们使用第三方工具为我们处理绑定(有很多这样的 -telerik 是一个例子,虽然不是我的一个实际使用)。

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

    所以 - 主要区别: 驾驶室

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

    WPF

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

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

    【讨论】:

    • 我看到 CAL 完全摆脱了命令和事件发布/订阅中的属性用法。您使用什么 CAL 扩展来使 CAL 类似于 CAB?
    • @JesonMartajaya 拥有 CAB 背景有助于学习 PRISM,因为您应该熟悉依赖注入、关注点分离、构建模块化应用程序(其中模块之间没有相互依赖关系)等概念.
    • @JesonMartajaya 我没有对 CAL 使用任何扩展来使它更像 CAB,我真的尝试学习如何使用 CAL,因为 CAL 打算使用(希望我已经管理它!)。您可以使用 Unity 容器的扩展将内容注入属性,但我只是倾向于通过构造函数解决我的依赖关系(或根据需要从通过 DI 注入到类中的统一容器)并根据需要使用服务实例.
    【解决方案2】:

    一篇对比 CAB 和 Prism 的优秀 MSDN 文章

    http://msdn.microsoft.com/en-us/library/ff921081%28v=pandp.40%29.aspx

    【讨论】:

      猜你喜欢
      • 2011-06-29
      • 1970-01-01
      • 2011-09-15
      • 1970-01-01
      • 2021-07-14
      • 2016-10-22
      • 2012-07-12
      • 2012-05-26
      • 2013-04-12
      相关资源
      最近更新 更多