c# - MVVM Light + Unity 还是 Prism?

标签 c# .net unity-container prism mvvm-light

我现在对 WPF 有点过时了,我很想听听人们对最新版本的 Prism(我之前使用过几个版本)与 MVVM Light + Unity 方法(我从未做过 - 像样的示例 URL 会很好)。

我的项目将是一个大型项目,由多个开发人员编写的多个模块组成。还有资金引入第 3 方控制套件,以便使用其中一个花哨的停靠/工作区布局管理器设置一个漂亮的工作区(我知道有些人比其他人更适合 Prism 区域)。

如果您现在要从头开始一个项目,您会选择什么?为什么? 有关特定推荐架构模式的详细信息将很有用(例如,模块 dll 的自动发现?注入(inject)日志服务?)。 基本上,任何想法和建议都会很好。我希望进行良好的讨论。也许您会建议进入另一个完全不同的方向?我正处于研究阶段,希望获得尽可能多的意见。

我把它放在这里是因为我认为它会比 Prism/MVVM Light 论坛获得更少的偏见观点,但是,如果有更适合这个问题的地方,请指出那个方向。

最佳答案

如果您需要模块化,您会想要看看 Prism。 Prism 有一些元素可以帮助您使用 MVVM(例如 DelegateCommand 和 CompositeCommand),但我认为它与另一个 MVVM 框架一起更完整。

前几天有个问题是关于如何给Prism建模的。查看它以获得有关如何考虑 Prism 功能的详细说明。 High Level Modelling Advice for Prism MVVM

Unity 是一种控制反转容器的实现,它绝对不错,但 Prism 有能力使用其他容器。它内置了对 MEF 的支持(后者内置于 .NET 4.0),但这不是您唯一的选择。查看 Prism 中包含的一些示例,然后确定您更喜欢哪种方法。在我看来,Unity 本身对于 UI 合成来说并不完整。如果您想尝试使用 MVVM 框架 + IoC 框架方法组合 UI,MEF 可能是更接近的选择。

MVVM Light 实际上是 Prism 的补充框架。要考虑的其他 MVVM 框架:

  • MVVM Foundation(非常轻量级……适合小型项目)
  • Caliburn(非常强大的框架)
  • Caliburn Micro(与 Ca​​liburn 的名字和作者相同,但它类似于 MVVM Light,但有一些不错的约定)
  • ReactiveUI (以前称为“ReactiveXAML”。这有点像大脑熔化器,但如果你学习 .NET (Rx) 的响应式(Reactive)扩展,这个框架简直太棒了……在我看来很神奇。)

如果我要开始一个新项目:我会选择 Prism 和 ReactiveUI。

Prism 因为你必须对大型项目进行模块化,我喜欢通过删除或添加 DLL 来删除和添加大型功能单元到应用程序的能力(而且你不必像你一样实现 DLL 嗅探功能将仅使用 IoC + MVVM 方法)。更容易测试,更容易调试,更容易单独开发。到处都很好。

ReactiveUI 因为如今在 UI 编程中,您的大部分时间都花在了管理 UI 线程上。阻塞是一个禁忌……用户不希望看到 UI 卡住;他们希望看到动画 GIF 等待符号旋转,这样他们就可以在加载数据时处理其他内容。此外,如今许多有值(value)的应用程序提供的是从不同系统获取数据并将它们放在 UI 中......您不仅需要一个好的合成系统 (Prism),还需要一个好的 MVVM 框架将异步操作视为面包和黄油……ReactiveUI 就是它。

关于c# - MVVM Light + Unity 还是 Prism?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4750255/

相关文章:

c# - 在 C#/WPF 中从线程显示 MessageBox,就像它来自主线程一样

c# - LINQ - VB.Net 中的动态 OrderBy

.net - 如何在不引用 CaSTLe DynamicProxy 的情况下检测 Type 是否是生成的 DynamicProxy?

design-patterns - 依赖注入(inject) : How To Overcome Cyclic Dependencies

c# - 获取 InnerException 导致错误

c# - 将选定的数据从 DataTable 复制到另一个 DataTable

c# - 通过鼠标单击获取图表上的 x 坐标

c# - 表单例份验证不适用于特定页面

c# - 接口(interface)属性的Unity按需解析

c# - 使用统一解析具有多个构造函数的实例