【发布时间】:2011-02-17 09:54:48
【问题描述】:
正统的 MVVM 实现毫无意义吗?我正在创建一个新的应用程序,我考虑过 Windows 窗体和 WPF。我选择 WPF 是因为它面向未来并且提供了很大的灵活性。使用 XAML 对 UI 进行重大更改的代码更少,更容易。
由于 WPF 的选择是显而易见的,我想我不妨一直使用 MVVM 作为我的应用程序架构,因为它提供了可混合性、分离问题和单元可测试性。从理论上讲,它看起来就像 UI 编程的圣杯一样美丽。这短暂的冒险;然而,已经变成了一个真正的头痛。 正如在实践中所预期的那样,我发现我已经将一个问题换成了另一个问题。我倾向于成为一个痴迷的程序员,因为我想以正确的方式做事,这样我才能得到正确的结果,并可能成为一个更好的程序员。 MVVM 模式刚刚通过了我的生产力测试,并且刚刚变成了一个令人讨厌的大黑客!
明显的例子是添加对模态对话框的支持。正确的方法是建立一个对话框并将其绑定到一个视图模型。让它发挥作用是困难的。为了从 MVVM 模式中受益,您必须在应用程序层的多个位置分布代码。您还必须使用深奥的编程结构,如模板和 Lamba 表达式。让你盯着屏幕挠头的东西。正如我最近发现的那样,这使得维护和调试成为等待发生的噩梦。我有一个关于框工作正常,直到我第二次调用它时遇到异常,说一旦关闭它就无法再次显示对话框。我必须为对话框窗口的关闭功能添加一个事件处理程序,在它的 IDialogView 实现中添加另一个,最后在 IDialogViewModel 中添加另一个。我以为 MVVM 会让我们免于如此奢侈的黑客攻击!
对于这个问题,有几个人提出了相互竞争的解决方案,但他们都是 hack,并没有提供一个干净、易于重用、优雅的解决方案。大多数 MVVM 工具包都掩盖了对话框,当它们处理它们时,它们只是不需要自定义界面或视图模型的警告框。
我打算放弃 MVVM 视图模式,至少放弃它的正统实现。你怎么看?如果你有任何麻烦,对你来说值得吗?我只是一个不称职的程序员还是 MVVM 不是它所宣传的那样?
【问题讨论】:
-
我一直质疑 MVVM 是否过度设计。有趣的问题。
-
像 MVVM 和 MVC 这样的模式看起来像是过度工程,直到您必须执行一些修改或更改组件。第一次你必须这样做,所有的仪式自己支付。
-
Lambda 很深奥?给我的消息。
-
@Ray - 哈哈,+1 评论! :D
-
正如 Alan Cooper 十多年前在 About Face 中指出的那样,如果您正在设计 UI 并且模式对话框不是边缘情况,那么您可能正在做一些事情错了。