我正在努力让自己准备好接受以下问题的挑战:
“为什么我们不能在后面的代码中实现表示模型?”
事实上,我参与过一个项目,我们使用了在后面的代码中实现的演示模型。它工作得相当好,我们甚至能够在它上面运行单元测试。是的,您在单元测试中依赖于 WPF……但它确实有效!
那么,使用代码背后的主要缺点是什么?
我确实更喜欢独立 ViewModel (MVVM) 的想法,但目前我觉得无法向客户证明它的合理性。
我正在努力让自己准备好接受以下问题的挑战:
“为什么我们不能在后面的代码中实现表示模型?”
事实上,我参与过一个项目,我们使用了在后面的代码中实现的演示模型。它工作得相当好,我们甚至能够在它上面运行单元测试。是的,您在单元测试中依赖于 WPF……但它确实有效!
那么,使用代码背后的主要缺点是什么?
我确实更喜欢独立 ViewModel (MVVM) 的想法,但目前我觉得无法向客户证明它的合理性。
The straightforward answer is the principle of separation of concerns. Of course, someone might argue that by putting the presentation model in the code-behind, it is separate from the view (XAML), but I don't agree with that. The code-behind can "see" all the internal details of the View because it is the View. Both the xaml and the code-behind are compiled together into one class to become the View. They are not separate at all.
There are lots of examples where you have to go into the code-behind to do view-related stuff, like hooking up interactions between controls that you just can't specify in Xaml. Once you do that, you now have your view logic intermixed with your presentation logic.
The concept of a ViewModel is quite powerful. ViewModels can "talk" to each other without the Views "talking" to each other, or even without the ViewModels "knowing" anything about the views.
您回答了问题的第一部分,必须在单元测试期间引导 wpf 应用程序。另一个是可移植性,您是否希望能够将不同的视图实现附加到同一个表示模型。(我知道弱,但它就是你所拥有的)
还有技能集的分离,只有了解 xaml 的开发人员才会参与视图的实际创建。让您利用现有的不了解 wpf 的内部人才。
检查这两个视频以获得一些想法。两个视频都展示了从代码中的所有内容开始开发应用程序,然后重构为 MVVM 模式。
另外,请参阅此 SO 问题以获取更多链接:MVVM:从头到尾的教程?
当您使用ViewModel-First方法时,它会成为一个缺点。在您的主应用程序中,您实例化 ViewModel 对象图,将其分配给根视图数据上下文,然后让视图根据 ViewModel 通知呈现其相关子项。
为什么它是一个缺点?事实上你可以在后面使用你的代码,但你最终会遇到很多技巧,有时应该忘记你的应用程序安全性。但实际上这种方法是理想的方法,您的视图模型完全无知,即使您可以先通过程序反转您的开发过程 - 后皮肤。(开玩笑)
另一方面,如果您使用View-First方法,则不会有任何缺点,因为 viewmodel 坐在上面。因为如果你需要一些棘手的东西,比如使用密码框,控制仍然在视图中,那么就像微软命中注定我们一样自然地去做。
希望它有所帮助。