我正在使用MVVM模型开发应用程序,但是到了需要选择要使用的框架的地步。
可能的选项包括:
- MVVM工具包
- MVVM基础
- WPF应用程序框架(WAF)
- 轻型MVVM
- 卡利本
- 肚带
- 棱镜
- 反应式UI
以您的经验,哪个更好?
我正在使用MVVM模型开发应用程序,但是到了需要选择要使用的框架的地步。
可能的选项包括:
以您的经验,哪个更好?
Answers:
这实际上取决于您要实现的目标以及要建立多少基础架构,以及找到有助于您的样本的难易程度。我将在这里声明一个兴趣,因为我一直积极参与至少一个MVVM框架,并且我已经通过WPF Disciples组向其他人提供了意见,所以我有些偏颇。这样说,这里是:
Microsoft的MVVM Toolkit-这仍然处于alpha阶段。当它最初发行时,由于它没有做,所以使徒弟们有些费劲。话虽如此,MS仍希望加强该框架,因此值得一看-它尚未准备就绪。
MVVM Foundation-啊,乔什·史密斯(Josh Smith)的框架版本。Josh是MVVM的父亲之一,并且一直是该模式的坚定拥护者和老师。结果,在其他框架中可以找到的很多东西都带有Josh的指纹。该框架旨在提供MVVM的基础知识,而不是解决一些更深奥的问题。最初,该功能仅适用于WPF,但诸如Laurent Bugnion和我本人之类的人已经添加了功能/项目,这也意味着该功能也将是Silverlight兼容的框架。
WAF-没有经验,所以我无法对此发表评论。
MVVM Light -Laurent Bugnion对此进行了介绍,并刚刚更新到了版本2。这是一个非常好的框架,但是它并不旨在涵盖MVVM应用程序的每个方面。考虑到Laurent的背景,它具有非常强大的Silverlight和Blendability支持。
更新 Laurent刚刚通知我说.NET 3.5和.NET 4.0版本具有功能兼容。Wau去Laurent。
Cinch-Sacha Barber出色的仅WPF的MVVM框架。这比我上面讨论的框架涵盖了更多的领域。这是一个出色的框架,并且利用了Bill Kempf出色的Onyx项目中涵盖的概念。Onyx旨在补充MVVM框架,并增加了人们通常在MVVM / WPF中难以完成的功能。同样,Onyx原本仅打算用作WPF,但现在已发展为包括SL兼容性-我参与其中的工作让我感到特别自豪。
Prism-再说一次,我从未使用过它,但是我听到了很多关于它的好东西。
海洋 -苹果酒团队的项目经理Karl Shifflett最近发布了功能齐全的WPF MVVM框架。同样,这是一个出色的框架,值得推荐。
最重要的是,下载不同的框架,看看它们,然后找出最直观地适合您的思维方式和需求的框架。如果您认为可能希望从相同的代码库中支持Silverlight,则应仅使用WPF框架。
我发现这篇文章非常有用http://www.japf.fr/2009/10/a-quick-tour-of-existing-mvvm-frameworks/,因此我可以将其带给这里的新用户
我更新了Cinch部分,并为其功能添加了Silverlight支持
长话对不起
共同特征:
•ViewModelBase类(用于实现INotifyPropertyChanged接口)
•类似于RelayCommand的类,用于将UI命令链接到ViewModel的处理程序
•框架附带了单元测试
肚带
•作者:Sacha Barber
•Silverlight支持:否(Cinch版本2支持Silverlight)
•文档:出色,在CodeProject上发表了6篇文章
•托管:CodePlex
•许可证:代码项目开放许可证
• 特征:
依附行为
使用IDataErrorInfo进行验证
支持IEditableObject
弱事件的创建和订阅
使用弱事件的调解员消息传递
IOC / DI支持(使用Unity)
服务:事件记录器,消息框,打开保存对话框,弹出窗口
穿线帮手
支持菜单项
可关闭的视图模型
MVVM代码生成器
MVVM Light工具包
•作者:Laurent Bugnion
•Silverlight支持:是
•文档:Laurent的博客以及其他开发人员也提供了许多文章
•托管:CodePlex
•许可证:MIT许可证
• 特征:
MSI安装程序
VS项目和项目模板
VS代码段
用于视图间模型通信的Messenger系统
将事件作为命令处理
MVVM助手
•作者:马克·史密斯
•Silverlight支持:否
•文档:Mark博客上的一些文章
•托管:个人网站
•许可证:未定义
• 特征:
依附行为
使用标记扩展创建视图模型
基于属性的验证
使用ServiceProvider方法的IOC / DI
可关闭的视图模型
等待光标(使用新的WaitCursor(){//您的代码在这里})
MVVM基础
•作者:乔什·史密斯(Josh Smith)
•Silverlight支持:否
•文档:Josh或Marlon Grech的博客上有关Messenger实现的文章
•托管:CodePlex
•许可证:MS-PL
• 特征:
用于视图间模型通信的Messenger系统
PropertyChanged事件监视器
卡利本
•作者:罗伯·艾森伯格
•Silverlight支持:是
•文档:可用的完整在线文档
•托管:CodePlex http://www.codeplex.com/caliburn
•许可证:MIT许可证
• 特征:
命令建立在动作之上,因此具有许多相同的功能,包括多个输入参数,过滤器和自动异步执行
负责处理UI生命周期问题的演示者,例如处理各种UI组件的激活,停用和关闭语义
Caliburn应用程序是完全可测试的
各种实用程序,例如后台任务管理器
支持各种UI模式(不仅限于MVVM)
依赖注入容器
y玛瑙
•作者:William e Kempf
•Silverlight支持:否
•文档:CodePlex上提供了基本介绍
•托管:CodePlex
•许可证:未指定
• 特征:
ServiceLocator模式
使用自定义标记扩展创建ViewModel
与UI相关的服务,例如IDisplayMessage
钙
•作者:丹尼尔·沃恩(Daniel Vaughan)
•Silverlight支持:否
•文档:2篇关于CodeProject的非常详细的文章(第1部分和第2部分)
•托管:CodePlex
•许可:使用,复制,修改和/或分发和保留版权!
• 特征:
模块管理器,用于在运行时启用或禁用模块
消息传递服务,用于使用相同的API从客户端或服务器与用户进行交互
将WPF ICommands与内容接口相关联的命令服务,仅当活动视图或视图模型实现该接口时,该接口才处于活动状态
工具栏和菜单的区域适配器
客户端-服务器日志记录可以立即使用
包括模块,例如Web浏览器,文本编辑器,输出窗口等
带脏文件指示的选项卡式界面(可在模块之间重复使用)
路线
•作者:Rishi
•Silverlight支持:是
•文档:作者博客上提供了许多文章(有关链接,请参见CodePlex项目主页)
•托管:CodePlex
•许可证:MS-PL
• 特征:
支持Blend3行为和触发器模型
资源定位器框架
查看服务:OpenFileDialog,ShowMessage…
使用属性将Map和ViewModel一起映射
Nito MVVM
•作者:Shammah
•Silverlight支持:否
•文档:否
•托管:CodePlex
•许可证:未指定
• 特征:
- ICommand接口的各种MVVM友好实现
海洋
•作者:卡尔·希夫莱特
•Silverlight支持:否
•文档:Karl博客上的文章
•托管:个人网站
•许可证:未指定
• 特征:
用VB.Net编写
基于属性的验证
viewmodel基类:relaycommand,closeableviewmodel…
SQL Server数据访问层
基本的MVVM框架
•作者:Lester Lobo
•Silverlight支持:否
•文档:库中提供了示例应用程序
•托管:CodePlex
•许可证:MS-PL
• 特征:
委托Command \ Keybinding
VM之间的消息传递
将事件作为具有附加行为的命令来处理
将对话框(以及更多)作为服务来处理
VS代码段
好光
•作者:Peter O'Hanlon•Silverlight支持:是
•文档:库中提供了示例应用程序
•托管:CodePlex
•许可证:MS-PL
• 特征:
“工作区”管理(可以关闭的文档集)
皮肤支持
VM之间的消息传递
我试图描述皮特的好答案中缺少的框架:
MVVM Toolkit(Microsoft)是带有Visual Studio项目模板的非常轻量级的库,应使用此模式支持初学者。如果Microsoft对其工具包获得了很好的反馈,则他们可以将其实现为新的Visual Studio(也许是2010年)项目模板。
Prism(Microsoft p&p)是一个框架,提供的功能不仅仅支持MVVM模式。该项目的主要目标是帮助您构建模块化 WPF和/或Silverlight应用程序。当您只需要实现MVVM模式或您是.NET / WPF的初学者时,我将不推荐该项目。另请参阅:链接。
WPF应用程序框架(WAF)是一个轻量级框架,可帮助您使用MVVM创建WPF应用程序。它仅用于WPF,因此不支持Silverlight。与 Controllers的引入相比,它与大多数其他MVVM框架相比有另一种方式。他们负责应用程序的工作流程,并在各种ViewModel之间进行中介。
嗯 Mvvm实际上并不需要整个框架来支持IMO。如果您了解这个概念,那么从实现INotify的干净VM基类开始就很简单,然后就从那里开始。
自己混合!
我使用了PRISM的EventAggregator,以及MVVM Foundation的ViewModelBase等。我还调整了RelayCommand(在某些地方调用了DelegateCommand)以也接受其他数据,依此类推。
我不会建议仅一个框架本身。
我的赌注将放在Caliburn和MVVMlight上,似乎这些mvvm框架中没有很多支持Silverlight。我可以预见,与IoC框架相比,将会有更多的MVVM框架可供选择,因为很难为mvvm框架设置功能边界。我想找出最适合您的项目的最佳方法是列出/比较其功能。
还要检查Mix10。我从这次演讲中学到了很多:构建您的mvvm框架。
如果您正在WPF / MVVM应用程序框架之上寻找可扩展性(编写插件的能力),那么您可能对SoapBox Core 免责声明感兴趣:我编写了它。它是开源的,因此即使您不使用它,也可能会有一些不错的主意。它同时将MEF用于可扩展性和IoC。