我最近一直在研究MVVM,我似乎得到了整体想法。虽然我不完全明白并且正在跳跃以获得一些答案,但还有一些不起眼的位,干杯!
对整个应用程序使用一个数据模型是不正确的。通常,如果我创建一个小实用程序,我会在一个类中拥有所有逻辑数据。这意味着我可以拥有如下内容:
DataStore myData = new DataStore;
如果可以拥有一个数据模型,那么可以有多个模型视图,比如说一个代表每个窗口或视图(这就是我设想MVVM工作的方式)。
如上所述,如果一个人拥有多个模型视图,那么似乎必须在第一个窗口(视图)之前声明模型,应该在哪里声明它?模型是否应通过对后续模型视图的引用传递?由于视图实例化了模型视图,因此窗口或页面(视图)需要了解模型以将其传递给模型视图,这不会成为耦合的来源。
很抱歉,如果这是一个很多问题,我会在一个窗口或页面感觉中了解MVVM,但是一旦我添加多个视图,我的系统就会崩溃。我可以使用单独的模型访问外部源来获取其数据,但如果数据需要在视图之间持续存在,我就会迷失。
感谢所有花时间回应!
答案 0 :(得分:5)
一些想法:
简单的应用程序不一定需要MVVM的复杂性 - 您可以通过消除ViewModel并直接使用底层模型来逃脱。请注意,不要将此方法延伸到断点 - 因为WPF非常依赖于诸如INotifyPropertyChanged和DependencyProperties之类的东西。您不希望开始将它们合并到您的模型类中。
是的,没关系。但是,...... 请记住,如果只有一个Model实例,则更简单 - 否则,当您要保存(或丢失一个版本的更改)时,您需要处理来自多个视图的合并更改。如果ViewModels引用相同的底层模型,那么这是可行的。
你无法避免MVVM中的某种程度的耦合。然而,(如果我理解你的问题正确)引入ModelViews之间的耦合可能是一个坏主意 - 因为它正在击败目的在为特定视图优化的模型上制作每个视角。
答案 1 :(得分:1)
我自己的经历:
我认为在整个应用程序中使用一个数据模型没有任何问题,具体取决于您想要做什么。只要您将其与View分开,就会保持在 MVVM 设计模式中。
我个人喜欢在我的每个视图中使用ModelView。我认为它有不同的论点,但我个人认为通过这样做,一切都更加模块化和单元可测试。
我尽量避免在ModelViews之间进行耦合。如果我的每个视图都有一个ModelView,我会在每个视图中单独声明每个ModelView。然后,我通过事件将每个视图实例化到我的主视图中。这与 MVVM 模式保持一致,您可以单独对每个模型视图进行单元测试。
如果您已经阅读过本文,我不会感到惊讶,但对于那些希望了解MVVM设计的人来说,这是一个很好的Link。
答案 2 :(得分:1)
使用一个数据是否不正确 整个应用程序的模型。 通常如果我创造一个小 实用我会拥有所有的 一个类中的逻辑数据。这个 意味着我可以拥有像这样的东西 以下内容:
`DataStore myData = new DataStore; `
这很好。您的数据模型是您的数据模型,应尽可能以最佳方式表示数据,无论是在一个类还是1000个。
如果可以拥有一个数据模型 拥有多个模型是否可以 查看,说一个代表每个人 窗口或视图(这就是我 设想MVVM工作)。
当然,在我看来,这正是你应该做的。一般来说,我会说每个视图都需要一个视图模型,无论视图是控件还是窗口。在某些情况下,您会发现为特定视图设置多个视图模型会有所帮助,但我首先要确保没有应该拆分的视图。
如上所述,如果一个人有多个 模型视图它似乎是 模型必须在之前声明 第一个窗口(视图),应该在哪里 它被宣布?该模型应该是 通过引用传递给后续的 模特观点?这不是一个 耦合源作为窗口或 页面(视图)需要知道 将模型传递给模型视图的模型 因为视图实例化了模型 图。
现在你正在进入宗教领域。我会稍微解决这个问题并说出对你的应用程序有意义的事情。也就是说,如果您想减少模型与视图/视图模型之间的耦合,我强烈建议从模型类中提取接口。在App.xaml.cs文件中创建模型然后将其作为接口的实现传递给视图(模型)将非常简单。