棱镜与mvvm光的UWP应用

本文关键字:UWP 应用 光的 mvvm 棱镜 | 更新日期: 2023-09-27 18:14:00

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

我是这两个框架的新手,即PRISM和MVVMLight。现在我的问题是将代码库从PRISM移动到MVVMLight有多困难。如果这将是困难的,应该等待PRISM的新版本发布。如果我们要迁移到MVVMLight,需要做哪些主要的改变?

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

两个框架是如何支持单元测试的

既然分配给这项任务的时间不多,那么哪一种方法是最有效的呢?

棱镜与mvvm光的UWP应用

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

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

3月,Prism的所有权作为一个开源项目转移到社区,并在GitHub上可用。他们决定继续前进,将通用代码合并到PCL核心程序集中,并添加对Xamarin Forms的支持。

到今天为止,还没有针对UWP的Prism 6的RTM版本。代码库即将发布,只存在一些小问题,但没有什么大问题阻止大多数用户使用这些比特。在这一点上,我会告诉你克隆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(每个视图的auto vs property), INotifyPropertyChanged的BindableBase以及有关应用程序生命周期管理的一切。这两个框架都很好,但我不建议在它们之间切换一个完整的LOB应用程序,因为这样做工作量太大(可能会引入bug)。

Windows 10 UWP应用程序远不适合您提到的任何框架。它们丰富的导航功能和自适应布局意味着很难看出Prism如何适合您。关于MVVMLight,除了滚动自己的视图模型之外,它提供的很少,通过避免它,您可以避免以后会咬您的严重锁定的可能性(它经常发生)