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

我对这两个框架都是陌生的,即PRISM和MVVMLight。现在我的问题是将代码库从PRISM迁移到MVVMLight会有多困难。如果有困难,应等待PRISM较新版本发布。而且,如果我们应该转向MVVMLight,则需要进行哪些重大更改。

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

关于这两个框架,单元测试如何得到支持?

既然没有太多时间分配给该任务,哪种方法最有效?

最佳答案

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

首先,对Prism进行一个小介绍,以使每个人都站起来。 Prism是由Microsoft Patterns&Practices创建的MVVM指导/框架。他们发布了WPF/Silverlight 的版本5。除此之外,他们还为Windows 8发布了Windows运行时的 Prism,为Windows 8发布了,并随后更新为Win8.1/WP8.1 RT。这是2个不同的代码库,第二个在区域等方面更轻便,但是为应用程序生命周期管理提供了非常有用的支持。认为它们相同是一种普遍的误解。

三月,Prism的所有权作为一个开源项目移交给了社区,可以在GitHub上找到。他们决定继续前进,在PCL核心Assemby中合并通用代码,并增加对Xamarin Forms的支持。

到今天为止,还没有用于UWP的Prism 6的RTM版本。该代码库几乎与only a few minor issues open一起发布,但是没有什么要阻止大多数用户已经使用这些位的。此时,我会告诉您克隆GitHub存储库,编译程序集并开始移植您的应用程序。有一些重大更改(主要是 namespace ),但是您应该立即启动并运行。一旦RTM软件包可用,请删除硬引用并使用NuGet。

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

回到讨论使用哪个MVVM框架。如果您的应用程序只有几页,请不要打扰使用框架并使MVVM保持简单。如果您要使用复杂的LOB应用程序,那么这些框架有其优点(当然也有缺点)。有很多选择(MVVM Light,Prism,Caliburn Micro等),它们都很好。

您的同事选择Prism的事实可能有Depechie提到的原因。首先,我在考虑应用程序生命周期管理,Prism对此提供了出色的支持。

通过正确使用基类,您应该能够从每个ViewModel重构出大多数依赖关系,以防您毕竟想切换到另一个框架。

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

关于c# - UWP应用的 Prism vs mvvm灯,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/32733783/

10-10 21:55
查看更多