C# WPF MVVM模型如何获取数据

C# WPF MVVM模型如何获取数据,c#,wpf,mvvm,C#,Wpf,Mvvm,最近,我正在学习MVVM设计模式 按照我的方式,我在模型中编写数据库函数,让viewmodel调用模型中的数据库函数,然后viewmodel获取数据库数据并设置为viewmodel notfiypropertychanged。这是我目前使用的方式 关于模型有一些问题让我困惑, 我读过很多文章,其中告诉我模型只是一个包含数据的容器,而不是更多的业务逻辑,我的问题是,如果模型只是一个数据容器,我需要让我的viewmodel调用数据库,然后获取数据并设置到模型,我认为这种方式非常奇怪,viewmode

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

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

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

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

大多数人告诉我的是,在“现实生活”的应用程序中,通常有服务层

其中一项服务是从数据库获取数据

模型工作(在我看来)是让开发人员了解数据库数据和结构。一个模型到一个数据库选项卡。 它还有助于在将数据发送到数据库之前检查数据是否正确(格式检查、数据类型等)

关于如何使用这个模型,还没有一个明确的答案。我见过很多不同的实现,它们都是针对特定任务实现的

是的,可能会出现一些ViewModel的代码和要执行的函数负载过重的情况,但这可能不是因为代码模式。这可能是因为代码的结构很差。在我现在的工作中,我发现了一个ViewModel,它包含3000多行代码(这要多得多)。这可以很容易地分成至少3个不同的视图模型和视图,但正如我所说的,糟糕的代码结构会导致问题

我建议你仔细阅读的一件事是

  • IoC-控制反转
  • DoP依赖反演原理
  • 双依赖注入

希望这能在某种程度上帮助你解释你的问题。

我做了一些这方面的研究,也发现它很令人困惑。我想指出的第一件事是,代码模式是抽象的。这意味着你有很多不同的方法来实现它/调整它

大多数人告诉我的是,在“现实生活”的应用程序中,通常有服务层

其中一项服务是从数据库获取数据

模型工作(在我看来)是让开发人员了解数据库数据和结构。一个模型到一个数据库选项卡。 它还有助于在将数据发送到数据库之前检查数据是否正确(格式检查、数据类型等)

关于如何使用这个模型,还没有一个明确的答案。我见过很多不同的实现,它们都是针对特定任务实现的

是的,可能会出现一些ViewModel的代码和要执行的函数负载过重的情况,但这可能不是因为代码模式。这可能是因为代码的结构很差。在我现在的工作中,我发现了一个ViewModel,它包含3000多行代码(这要多得多)。这可以很容易地分成至少3个不同的视图模型和视图,但正如我所说的,糟糕的代码结构会导致问题

我建议你仔细阅读的一件事是

  • IoC-控制反转
  • DoP依赖反演原理
  • 双依赖注入

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

模型:

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

模型是描述域逻辑中实体的类。什么是域?星巴克的领域是咖啡饮料和员工(以及其他),福特的领域是汽车、装配线和员工。《纽约时报》的领域是文章、问题、供应路线、订户等

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

您可以将数据调用放在模型中,但更常见的是有助手类、数据访问层(DAL),将所有数据库调用放在一个地方,而不是分散

视图模型:

viewmodel位于域模型和视图之间。它是一个公开模型属性并表示视图状态的类。viewmodel可能只公开模型中UI需要显示的所有属性的子集,但它也可以添加自己的属性,例如;用户是否处于编辑模式?是否进行了需要保存的更改?MVVM的卖点是UI绑定到viewmodel上的这些属性,这是一种使UI与更改保持最新的机制,并且这个额外的抽象层方便地将视图与模型中的任何逻辑解耦,使其对任意方向的代码更改都更加健壮,并且是可测试的。关于这个话题还有更多的话要说,但我会让你们继续读下去

关于MVVM模式有很多好的资源和信息;从博客到微软等等

如果您喜欢视频,Pluralsight提供了有关MVVM模式的优秀视频教程 和。他们有30天的免费试用期

“只是一个数据容器”


这种只保存要传递的数据的类通常称为数据传输对象(DTO)。通常将它们保持在较小的范围内,并从fetch数据库数据方法调用返回这些方法的集合

模型:

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

模型是描述域逻辑中实体的类。什么是域?星巴克的领域是咖啡饮料和员工(以及其他),福特的领域