C#MVVM - 这里需要一个模型吗?

时间:2011-03-04 05:32:59

标签: c# mvvm

所以我正在使用带有WPF的C#(使用Expression Blend)深入研究MVVM,并遇到了如何正确实现从数据库收集数据并在窗口中显示数据的问题。

我的视图只是一个带有几个TextBlocks的网格,我可以使用SQL查询中的数据进行更新(我正在报告对我们公司和我们的电话代理进行的呼叫次数,因此所有呼叫,来电,等)

我的问题是,我在这里需要一个模型来获取/保存数据吗?或者在ViewModel中这样做是好的(或者是可接受的)MVVM实践吗?如果我在VM中执行此操作,我可以轻松实现INotifyPropertyChanged事件,一切正常。如果我创建一个模型来保存数据,那么我是否必须在模型和VM中创建一个INotifyPropertyChanged,或者还有其他什么东西应该用来进行通知?

这似乎是一个直接的任务,但我似乎无法找到一个只显示数据的好例子,我发现的每个例子都是一个集合,并且是我想要确保我做的第一个MVVM程序它是对的:))

我在另一篇文章中读到有人说“每个模型都需要一个虚拟机但不是每个虚拟机都需要一个模型”。这与我上面的问题一致,并且只想听听一些有经验的用户的想法。

谢谢, 布赖恩

3 个答案:

答案 0 :(得分:0)

MVVM不是一个严格的模式。你可以做适合自己情况的事情。

有些人会说模型不应该实现INotifyPropertyChanged,但我认为这背后没有合理的理由。

我建议,对于一个简单的示例,如您所描述的,请使用单个VM,不使用任何模型并直接在VM中填充属性。

你应该去一个完整的View-ViewModel-Model模式,你有一个或几个模型,有多个视图,然后你需要多个ViewModel,每个View一个。

我实现了MVVM,其中VM具有Web服务引用并从Web服务中提取其模型,您可以说来自Sql查询的DataSet是模型并将ViewModel包装在DataSet中的数据周围。 / p>

答案 1 :(得分:0)

我认为你需要某种模型,即使它只是一个简单的类,这样你就可以抽象出数据库(可能带有接口)并从VM测试到与dB交互的方法。实现MVVM结构还有其他好处。它提供了关注点分离,更清晰的逻辑和可能的代码重用。

我对你的问题的回答是,“你要去测试吗?”如果没有,那么你不需要模型。将代码放入VM并交付项目。如果您要测试,请介绍一个模型。

答案 2 :(得分:0)

你*应该“拥有一个模型,你应该将其视为两个独立的部分:
1)一种域对象,它封装了业务规则和逻辑(即客户)
2)一些数据访问类型的对象封装数据检索(即CustomerDao或CustomerRepository)

这两个都应该注入到视图模型构造函数中,而不是在视图模型中的某处新建它们:

class CustomerViewModel(Customer customer, CustomerDao){...}

应该进行测试,即使它看似微不足道;如果它只需要一两次测试来证明它有效,那就太好了。

HTH,
Berryl