用于UWP应用的prism vs mvvm light

时间:2015-09-23 07:43:51

标签: c# mvvm prism mvvm-light uwp

我们在Windows 8.1中有一个与Win 10兼容的工作项目。现在要求将此项目转换为UWP。在早期的项目中,我们使用PRISM作为MVVM的框架。现在的问题是,对于UWP应用程序,Prism的新版本尚未发布,我们正在考虑使用MVVMLight。

我是这两个框架的新手,即PRISM和MVVMLight。现在我的问题是将代码库从PRISM转移到MVVMLight是多么困难。如果很难,应该等待PRISM更新的版本发布。如果我们应该转向MVVMLight,那么需要做些重大改变。

根据我的观察,代码库与PRISM高度耦合,在整个代码中广泛使用IResourceLoader,ISessionStateService等接口。另外,我读到PRISM有一个学习曲线,而MVVMLight没有。因此,如果我们决定转向MVVMLight,我是否必须首先学习PRISM以了解代码库,然后学习MVVMLight来移植代码库。如果我们决定等待本周某时候发布更新版本的PRISM,是否会有重大的代码更改?

如何在两个框架中支持单元测试。

因为,没有太多时间分配给这项任务,这将是最有效的方式继续进行?

2 个答案:

答案 0 :(得分:11)

TL; DR:编译最新的Prism代码以预期新的NuGet包。

首先是Prism的一个小介绍,让每个人都站在同一条路上。 Prism是由Microsoft Patterns& Sons创建的MVVM指导/框架。实践。他们为WPF / Silverlight 发布了第5版。除此之外,他们还为Windows 8发布了 Prism for Windows Runtime ,后来更新为Win8.1 / WP8.1 RT。这些是两个不同的代码库,第二个代码库在区域等方面更轻量级,但为应用程序生命周期管理提供了非常有用的支持。认为它们是相同的是一种常见的误解。

3月份,Prism的所有权作为开源项目转移到社区,可在GitHub获得。他们决定继续前进,将公共代码合并到PCL核心组件中,并添加对Xamarin Forms的支持。

截至今天,还没有针对UWP的Prism 6的RTM版本。代码库非常接近于only a few minor issues open发布,但没有什么主要阻止大多数用户使用这些位。在这个时候,我会告诉你克隆GitHub存储库,编译程序集并开始移植你的应用程序。有一些重大更改(主要是命名空间),但您应该立即启动并运行。一旦RTM包可用,删除硬引用并使用NuGet。

我已经移植了一个较小的应用程序,我本周末计划移植一个较大的LOB(超过60个屏幕)。

回到MVVM框架使用的讨论。如果您的应用程序只有几页,请不要使用框架并保持MVVM简单。如果您正在寻找复杂的LOB应用程序,这些框架有其优势(当然也有缺点)。有很多选择(MVVM Light,Prism,Caliburn Micro,...),所有这些都很好。

你的同事选择Prism的事实可能有像Depechie所说的那样。首先,我正在考虑应用程序生命周期管理,其中Prism具有更好的支持。

正确使用基类后,您应该能够重构每个ViewModel的大多数依赖项,以防万一你想切换到另一个框架。

在切换时必须解决的Prism for Windows Runtime和MVVM Light之间的主要区别(VisualStateAwarePages,ViewModelLocator(每个视图的自动vs属性),INotifyPropertyChanged的BindableBase以及应用程序生命周期的所有内容)管理。这两个框架都很好,但我不建议在它们之间切换一个完整的LOB应用程序,因为它的工作太多(引入可能的错误)。

答案 1 :(得分:3)

Windows 10 UWP应用程序远不适合您提到的任何框架。他们丰富的导航能力和适应性布局意味着很难看出棱镜如何为您效果良好。关于MVVMLight,它提供了很少的上面你自己的视图模型,并通过避免它你可以避免一个讨厌的锁定的可能性,以后会咬你(它经常这样做)