WPF MVVM模型如何获取数据

时间:2017-09-13 05:53:26

标签: c# wpf mvvm

最近,我正在学习MVVM设计模式!

以我的方式,我在模型中编写数据库函数,并让viewmodel在模型中调用数据库函数,然后viewmodel获取数据库数据并设置为viewmodel notfiypropertychanged。这是我目前使用的方式!

有些问题让我对模特感到困惑, 我读了许多文章,告诉我模型只是一个包含数据而不是更多的业务逻辑,这里是我的问题,如果模型只是一个数据容器,我需要让我的viewmodel调用数据库然后获取数据并设置为模型,我认为这种方式非常奇怪,并且viewmodel代码很重要。有人有另一种方法吗?谢谢!

3 个答案:

答案 0 :(得分:1)

型号:

  

“模型只包含数据,而不是更多业务逻辑”

模型是描述域逻辑中的实体的类。什么是域名?星巴克的领域是咖啡饮料和员工(其中包括),福特的领域是汽车,装配线和员工。 NYTimes的域名是文章,问题,供应路线,订阅者等等。

模型包含数据和逻辑。您可以使用多个模型来描述您的域。

您可以将数据调用放在模型中,但更常见的是有辅助类,数据访问层(DAL),将所有数据库调用保存在一个地方,而不是将它们分散开来。

ViewModel:

viewmodel位于您的域模型和视图之间。它是一个暴露模型属性并表示视图状态的类。 viewmodel可能只公开UI需要显示的模型中所有属性的子集,但它也可以添加自己的属性,例如;用户是否处于编辑模式?有变化需要节约吗? MVVM的卖点是UI绑定到viewmodel上的这些属性,这是一种保持UI与更新保持同步的机制,这个额外的抽象层可以方便地将视图与模型中的任何逻辑分离。对于任一方向和可测试的代码更改都更加健壮。关于这个主题还有更多的话要说,但我会留给你阅读它。

MVVM模式有很多好的资源和信息;从博客Model-View-ViewModel (MVVM) Explained到微软The MVVM Pattern以及此处的SO。

如果你更喜欢视频,Pluralsight在MVVM模式上有很好的视频教程 Practical MVVMWPF MVVM In Depths。他们有30天的免费试用期。

  

“只是一个数据容器”

仅保存要传递的数据的类通常称为数据传输对象(DTO)。保持它们很小并且从fetch数据库数据方法调用返回这些集合是很常见的。

答案 1 :(得分:0)

我已经做了一些研究,也发现它很混乱。我要指出的第一件事是代码模式是抽象的。这意味着你有不同的方式来实现它/调整它。

大多数人告诉我的是,在“真实”应用程序中,您通常会有多层服务。

其中一项服务是从数据库获取数据的地方。

模型作业(在我看来)是为开发人员提供有关数据库数据和结构的知识。一个模型到一个数据库表。 在将数据发送到数据库之前,它还有助于检查数据是否正确(格式检查,数据类型等)。

关于如何使用模型没有明确的答案。我已经看到了大量不同的实现,它们都是针对特定任务实现的。

是的,可能会出现一些ViewModel变得繁重的代码和函数要执行,但它可能不是因为代码模式。这可能是因为代码结构不佳。在我的工作中,我现在发现了一个包含超过3000行代码的ViewModel(这是很好的方式)。这很容易分成至少3个不同的ViewModel和Views,但正如我所说,糟糕的代码结构会导致问题。

我建议您阅读的一件事是

  • IoC - 控制反转
  • DoP - 依赖性倒置原则
  • DI - 依赖注入

希望这有助于解释你的问题。

答案 2 :(得分:0)

  

我读了许多文章,告诉我模型只包含数据而不是更多业务逻辑

模型可以由服务,数据库访问层或业务层表示,因此您当前的方法没有任何问题。业务逻辑确实属于该模型。

但有时人们倾向于提及一个孩子&#34;输入作为模型。例如,如果您的视图模型公开List<Item>属性,则Item类可能被视为模型。也许你的困惑来自于此。

这种类(Item)通常实现INotifyPropertyChanged接口以提供更改通知,并且实际上只是&#34;嵌套&#34;查看不包含任何业务逻辑的模型。

希望这是有道理的。