什么是MVVM VIEW优先的方法
本文关键字:方法 VIEW MVVM 什么 | 更新日期: 2023-09-27 18:21:16
我正在PluralSight的Brian Lagunas的一门课程中学习MVVM。
一开始,他编写了这两个界面:
public interface IView
{
IViewModel ViewModel {get;set;}
}
public interface IViewModel
{
IView View {get;set;}
}
我在那个模式下学习,然后他从IView中删除了ViewModel。
public interface IView {}
但我看不出它有什么不同,也许它有优点也有缺点。如果我举第一个例子,有什么不对吗?
这当然是为了减少上下文,留下任何有用的语句,但第一眼看到的是接口
public interface IViewModel
{
IView View {get;set;}
}
对我来说似乎很困惑,因为MVVM模式的主要思想是ViewModel完全不知道View。如果您为ViewModel配备了对视图的引用,则您违反了这一想法。
根据这个博客:
- 视图优先:视图与其ViewModel(通常通过数据绑定)
- ViewModel First:ViewModel创建视图(通常通过IoC容器)
在这两种方法中,它都对视图模型。此外,这两者都意味着一对一的关系虽然常见的情况并非总是如此。
嗯,我还没有看过复数形式的课程,但我可以大致谈谈依赖关系管理。在最初的方案中,实体A知道实体B,B知道A。在这个意义上,有两个耦合度:A依赖于B,B依赖于A。虽然它们只依赖于接口,这是积极的,但这种依赖仍然存在。
通过删除其中一个依赖项,您将得到一个场景,其中a依赖于B,但B不依赖、不关心甚至不知道a。在原始场景中,如果您对IView或IViewModel的API进行更改,这些更改将是破坏性的更改。在第二个场景中,您可以对IViewModel进行任何更改,这些更改不会影响视图实现。
这就是优势。
至于缺点,唯一的缺点是你失去了便利,但我认为这并不是真正的缺点。在我的书中,任何时候你都可以(在合理的范围内)最小化耦合和依赖,这就是胜利。
我认为这一切都是关于通过ViewModel抽象视图的想法;ViewModel公开了必须呈现给View的任何属性,以及View[实践中的用户输入]可以更改的属性(考虑双向绑定)。它是绑定引擎,负责通过PropertyChanged事件将UI与ViewModel同步;通过这种方式,ViewModel不需要引用正在使用的视图,它会向任何视图(您想要使用)公开一些属性。。。