Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Wpf 何时不使用MVVM?_Wpf_Design Patterns_Mvvm - Fatal编程技术网

Wpf 何时不使用MVVM?

Wpf 何时不使用MVVM?,wpf,design-patterns,mvvm,Wpf,Design Patterns,Mvvm,我最近开始使用MVVM模式。我已经有好几个项目使用了它,每一个新项目,我开始看到它将非常适合这个新项目 现在我开始问自己,在什么情况下使用MVVM更好。或者这是一个你可以在任何地方使用的很好的模式 你能描述一下MVVM不是最佳选择的几种情况吗?对于我来说,当你想做一个小项目或者永远不打算让它以多种方式运行(WPF/Silverlight/WEB/Dll)时,最好不要使用它,那么MVC就足够了。如果MVVM是一个工具,在某个特定的时刻没有被使用过,而且从来没有被使用过,我才不喜欢它 在许多“小”项

我最近开始使用MVVM模式。我已经有好几个项目使用了它,每一个新项目,我开始看到它将非常适合这个新项目

现在我开始问自己,在什么情况下使用MVVM更好。或者这是一个你可以在任何地方使用的很好的模式


你能描述一下MVVM不是最佳选择的几种情况吗?

对于我来说,当你想做一个小项目或者永远不打算让它以多种方式运行(WPF/Silverlight/WEB/Dll)时,最好不要使用它,那么MVC就足够了。

如果MVVM是一个工具,在某个特定的时刻没有被使用过,而且从来没有被使用过,我才不喜欢它

在许多“小”项目中,我开始时没有使用MVVM,后来我改为使用MVVM。它使IMO中的项目更加干净,并为我的所有项目提供了类似的结构。如果客户有一个小请求,这可以帮助我快速更改一些旧代码中的某些内容。我没有太多时间给自己定位


另一个优点是更容易保持我的库干净,因为我可以专注于一种技术,因此有更多的时间来维护和扩展。

这取决于您想做什么

就像那些家伙说的,如果你正在创建一个不需要大量测试的小工具或项目,那么MVVM就太过了

可以说,MVVM的主要优势在于,当代码单元从可视层抽象出来时,它使代码单元可测试。对于那些需要可靠且将被客户等使用的大型项目(不仅仅是您自己作为最终用户),MVVM是一种很好的设计模式


简言之,我想,如果你只是创建一个小项目来捣乱,那么MVVM就像是试图用火箭筒杀死一只蚂蚁:)

简短回答:如果你没有使用WPF/Silverlight/我知道的任何具有强大自动绑定功能的技术,就不要使用MVVM

详细回答:没有其他模式比WPF/Silverlight中的MVVM更能促进单元测试。
我建议您看看我的另一个答案:

我可以想到两种情况下我不会使用MVVM

一个是如果应用程序足够简单,我不需要在视图模型和模型之间进行分离。如果我实现了
INotifyPropertyChanged
和一个
RelayCommand
或两个,会不会把我的类搞得太糟?如果没有,我可能会跳过创建单独类的步骤。或者,我可能只需要一个视图模型来模拟一个功能性的UI,并且担心在客户机咬人时实现实际的后端功能


另一个是当我需要足够高的性能,并且视图中有足够多的对象时,我需要编写直接操作WPF对象的代码。实际上我还没有确定它的基准,但我可以合理地确定,通过迭代包含它们的数组并直接修改它们的
TranslateTransform
(如果这确实是定位它们的最快方法),可以绘制1000个移动粒子将比修改其基本属性并使用绑定更快。

您可能想看看Silverlight论坛,其中讨论了MVVM的一些优点和缺点。

我也想到了第二种情况,但我不确定使用MVVM会降低多少性能。如果您足够聪明,能够找到一种比MVVM更适合您的需要的方法,那么您最好知道使用MVVM以及使用数据绑定而不是直接的属性操作会对性能造成什么样的损失,因为它可能非常小,甚至不成问题。这也可能发生在大型项目中: