传统的MVVM实现是否没有意义?我正在创建一个新的应用程序,考虑了Windows Forms和WPF。我选择了WPF,因为它是未来的趋势,提供了很多灵活性。使用XAML可以减少代码量并更轻松地对UI进行重大更改。
既然选择WPF很明显,那么我认为我也应该使用MVVM作为我的应用程序架构,因为它提供了混合能力、分离关注点和单元测试能力。在理论上,这似乎就像UI编程的圣杯一样美好。然而,这段简短的冒险却变成了一个真正的头痛。
实践中,我发现自己交换了一个问题以换取另一个问题,这与我的预期相同。我倾向于成为一个有强迫症的程序员,因为我想以正确的方式做事情,以便达到正确的结果并可能成为一个更好的程序员。MVVM模式只是在我的生产力测试中不及格,变成了一个大杂烩!
明显的例子是添加对模态对话框的支持。正确的方法是弹出一个对话框并将其绑定到视图模型。使其工作很困难。为了从MVVM模式中受益,您必须将代码分布在应用程序的几个层中。您还必须使用像模板和lambda表达式这样的深奥编程构造。这些东西让你盯着屏幕挠头。如我最近所发现的那样,这使得维护和调试成为一场等待发生的噩梦。我的一个关于框已经能够正常工作了,直到我第二次调用它时出现异常,说它不能再次显示对话框一旦关闭。我不得不在对话窗口中添加一个关闭功能的事件处理器,在其IDialogView实现中添加另一个事件处理程序,最后在IDialogViewModel中再次添加一个事件处理程序。我想MVVM会使我们摆脱这种过度复杂的方式!
有几位竞争解决此问题的人,它们都是hack,不提供清洁、易重用、优雅的解决方案。大多数MVVM工具包忽略了对话框,即使他们解决了它们,它们也只是不需要自定义接口或视图模型的警报框。
我计划放弃MVVM视图模式,至少是其正统实现。你认为呢?如果你曾经使用过它,这对你来说是否值得麻烦?我是一个无能的程序员吗,还是MVVM并没有像宣传的那样好用?