我正在研究WPF应用程序,我正在使用MVVM模式构建它。最初我有一个想法,ViewModels应该是可重用的,但现在我不再太确定了。
因此;是否应该考虑具有一个特定View的ViewModel类,或者考虑可重用性?
答案 0 :(得分:12)
要回答您的问题,请考虑单一责任原则:
“一个班级应该只有一个 一,改变的理由。“
我认为,在合理范围内,您通常不希望将ViewModel重用于多个视图。我争论的主要原因是因为这会给你的ViewModel带来多个改变的理由。换句话说,如果一个或另一个视图发生变化,它需要改变,在我看来,这是改变的两个原因。它停在哪里?在这种情况下,我会保持简单,并将一个ViewModel绑定到View。
MVVM与WPF一起考虑的另一件事是数据模板。如果每个ViewModel迎合一个且只有一个视图,则更容易实现。
答案 1 :(得分:3)
总的来说,应用YAGNI原则 - 您可能不需要它。除非您可以看到这些事情可能发生,否则我会采用最简单的方法让您的软件满足您目前的要求。
答案 2 :(得分:2)
在我看来, MVVM的主要目标是消除单元测试无法轻易测试的代码。由于视图模型可以进行单元测试,但视图不能,因此可以通过尽可能使视图变得愚蠢来实现。理想情况下,就像使用XAML一样,视图完全是声明性的,并且只对视图模型进行数据绑定。因此,“没有代码背后”的口头禅。
视图模型在不同UI技术中的可重用性实际上并不是MVVM的目标。如果您尝试它,您可能会想要再次将特定于UI技术的代码移动到视图以保持视图模型可重用。这将违背可测试性的主要目标。
如果您确实发现自己需要支持不同的UI技术,那么您仍然可以将视图模型的通用逻辑分解为共享的“表示”层。我不会这样做,直到确定它是必要的。
答案 3 :(得分:0)
这是一个老问题,所以我不愿添加另一个答案。但到目前为止发布的所有答案都忽略了这一点。 The answer from MSDN非常清楚:ViewModel非常专门用于各种操作系统的许多视图共享,如下图所示:
否则将导致冗余代码。