MVVM Light + Unity还是Prism?

39

我对WPF有点过时了,想听听人们对最新版本的Prism(我几个版本之前用过)和MVVM Light + Unity方法(我从未使用过 - 如果有良好示例URL将会很不错)的看法。

我的项目将包含多个模块,由多位开发人员编写。此外,还有资金引入第三方控件套件,以使用其中一种花哨的Docking/Workspace布局管理器来设置一个漂亮的工作区域(我知道有些与Prism区域兼容性更好)。

如果您现在从零开始一个项目,您会选择什么?为什么? 具体推荐架构模式的详细信息将是有用的(例如,自动发现模块DLL?注入日志记录服务?)。 基本上,任何想法和建议都会很好。我想展开一次良好的讨论。也许有另一个完全不同的方向,您会建议去吗?我现在非常处于研究阶段,希望获得尽可能多的输入。

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

1个回答

55
如果您需要模块化,您可以考虑使用 Prism。Prism有一些元素可以帮助您使用MVVM(例如DelegateCommand和CompositeCommand),但我认为它与另一个MVVM框架相比更加完整。
几天前有一个关于如何对Prism进行建模的问题。请查看这个问题以获取有关如何考虑Prism功能的详细说明。 Prism MVVM高级建模建议 Unity是一个反转控制容器的实现,而且确实很好,但是Prism有能力使用其他容器。它内置了对MEF的支持(反过来,MEF内置于.NET 4.0中),但这不是您唯一的选择。查看Prism中包含的一些示例,并决定哪种方法更适合您。在我看来,Unity本身并不完整,不能用于UI组合。如果您想尝试将UI与MVVM框架+ IoC框架方法组合,那么MEF可能是更好的选择。
MVVM Light实际上是Prism的补充框架。其他要考虑的MVVM框架:
  • MVVM Foundation(非常轻量级...适合小型项目)
  • Caliburn(非常强大的框架)
  • Caliburn Micro(与Caliburn共享名称和作者,但类似于MVVM Light并具有一些不错的惯例)
  • ReactiveUI(曾用名为“ReactiveXAML”。这可能有点令人费解,但如果您学习了.NET下的反应式扩展(Rx),那么这个框架简直是令人惊叹的......在我看来很神奇。)
如果我要开始一个新项目:我会选择Prism和ReactiveUI。

Prism是因为对于大型项目需要具备模块化设计,我喜欢通过删除或添加DLLs的方式来移除或添加应用程序的大单元功能(而且不需要像只使用IoC + MVVM方法那样实现DLL嗅探功能)。更易于测试、调试和分开开发。总的来说非常好。

ReactiveUI则是因为在UI编程中,大部分时间都花在了UI线程的管理上。阻塞是不可取的...用户不想看到UI冻结;他们希望看到动画GIF等待符号旋转,这样就知道可以在数据加载时做其他事情。此外,如今应用程序提供的价值很大程度上体现在将来自不同系统的数据放在一起展示...你不仅需要一个好的组合系统(Prism),还需要一个把异步操作作为核心的好的MVVM框架... ReactiveUI就是这个。


抱歉回复晚了,突然有另一个项目优先处理,这个被推到了我的脑后。非常有帮助的回复,我会查看你指出的其他线程和框架。 - David
我建议您查看MEF,作为Prism组合方面的附加功能或替代品,特别是在Silverlight中。 - Abhinav Gujjar

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接