0

为什么在使用 MVVM 时有一些代码用于执行简单的操作(例如打开或关闭对话框)是一个糟糕的设计选择?如果不是因为代码落后,那么处理这样一个简单问题(例如在 MVVM 中打开对话框)的一致性在哪里?

我知道这个主题可能已经被打死了,并且这些年来在 WPF 中使用“代码隐藏”已经得到了很多不好的代表。我只是想在这里表达我的观点,希望它可以帮助某人对这个问题有不同的看法。

我想大多数人都会同意 MVVM 模式虽然有点臃肿,但它鼓励重用和更好的可测试代码。将业务逻辑与视图分离并不是一个新概念,但许多人仍然不这样做。MVVM 和 WPF 通过数据绑定的概念使这种分离变得更容易一些,并允许您的 ViewModel 和业务逻辑独立于视图进行测试。

当开发人员需要做一些简单的事情(例如打开或关闭对话框)时,它就会崩溃。在 MVVM 之外,开发人员可以只实例化视图、分配 DataContext 并调用 ShowDialog。但是在 MVVM 中,开发人员的第一个想法始终是通过 MVVM 打开/关闭对话框的常见模式是什么。他们做了什么,他们将问题提交给 Google/Bing/StackOverflow。果然,他们找到了问题的答案,但问题是这里没有一致性来做这样一个简单的操作。有些人想使用调解器,有些人想使用对话服务,还有一些人想引入 Prism。几乎每个人都有自己的本土实施,所有人都要做些什么?这样他们就可以避免“隐藏代码”?对我来说这只是悲伤。我们' 我们基本上采用了一些简单易行的方法,并添加了抽象和间接来尝试解决问题。收益太小了,根本不值得。无需通过此级别间接,您仍然可以将您的 ViewModel 与其他 View 重用,并且您仍然可以单独测试您的 ViewModel。您唯一没有测试的是打开或关闭对话框的几行代码。

MVVM 和单元测试的纯粹主义者会认为这是亵渎神明。但请记住,最终,您要决定应用程序的复杂程度。对我来说,简单的解决方案通常是正确的解决方案。

4

1 回答 1

1

Why is having some code behind for doing simple operations such as opening or closing a dialog a bad design choice when using MVVM?

It's not and anyone who tells you otherwise does not understand the central objective of MVVM.

If not for code behind, then where is the consistency for handling such a simple problem such as opening a dialog in MVVM?

Consistency regarding a specific problem is not something a general pattern like MVVM can or needs to provide. There is no right way to do it, among other aspects there are simply ways that violate the MVVM and those that do not.

于 2013-09-05T20:04:36.823 回答