用于UWP应用的prism vs mvvm light

Aak*_*sha 10 c# prism mvvm 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,是否会有重大的代码更改?

如何在两个框架上支持单元测试.

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

Bar*_*art 11

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

首先是一个关于Prism的小介绍,让每个人都站在同一条路上.Prism是由Microsoft Patterns&Practices创建的MVVM指南/框架.他们为WPF/Silverlight发布了第5版.除此之外,他们还发布了适用于Windows 8的Windows Runtime的Prism,后来更新为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(每个视图的自动vs属性),INotifyPropertyChanged的BindableBase以及有关应用程序生命周期管理的所有内容).这两个框架都很好,但我不建议在它们之间切换一个完整的LOB应用程序,因为它只是太多的工作(引入可能的错误).