gpt4 book ai didi

c# - mvvm混淆模型和业务层连接

转载 作者:行者123 更新时间:2023-11-30 16:56:07 25 4
gpt4 key购买 nike

所以我已经搜索了一段时间,我对模型部分的所有搜索都让我感到困惑。

我见过很多示例,其中 View 模型直接引用模型,然后设置模型的成员变量。然而,模型不应该是一个业务对象,以便业务层可以使用该数据进行计算吗?

所以...

1) 我是否应该在 UI 和业务层之间共享模型,以便两者都引用完全相同的对象(每个层不应该相互“隐藏”它们的内容,在这种情况下这不是最好的)。

http://blog.trivadis.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-01-50/1856.distributed_5F00_domain.png

2)或者模型应该在业务层。然后 UI 使用提供的业务接口(interface)从 View 模型调用以访问模型信息?这样模型本身就从 UI 中隐藏了。类似于选项 1 的图像,除了会有一些访问模型和服务的接口(interface)。

3) 或者 UI 确实有模型。但是我可以看到很多情况下,业务层需要此信息,从而导致制作看起来相对完全相同的多个模型。想象一下,下面的整个图片都位于 UI 中。然后是模型访问的模型下面的业务层。 http://rarcher.azurewebsites.net/Images/mvvm00.png

最佳答案

View 永远无法直接访问模型。 View 通过它的 DataContext 连接到 ViewModel。

ViewModel 可以直接访问模型,并且能够从模型中恢复值并将值设置到模型中以及调用方法以便发生操作。但是 ViewModel 不能直接访问 View,可能有 0 个、1 个或多个 View 实例都在查看同一个 ViewModel,它永远不会知道。

Model 不知道 ViewModel 或 View 的存在。因此,您可以在不同的项目中重用 Model 类,而无需依赖 WPF 甚至用户界面。

如何将模型附加到 ViewModel 取决于您。您可以将对模型的引用传递到 ViewModel 的构造函数中。或者提供一个单独的方法或属性,在构建 ViewModel 后调用。

为了完全分离,您将在 ViewModel 上公开与模型本身相同的属性列表(或者只是实际需要的子集)。 ViewModel 可以连接到 INotifyPropertyChanged 接口(interface)的 PropertyChanged 事件中,该接口(interface)应该从 Model 中公开。当它看到更改时,它可以通过自己的属性和自己的 INotifyPropertyChanged 接口(interface)实现将更改传递给任何观察 View 。

关于c# - mvvm混淆模型和业务层连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28356818/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com