gpt4 book ai didi

C# MVVM 服务层位于何处?

转载 作者:太空狗 更新时间:2023-10-30 01:17:31 30 4
gpt4 key购买 nike

我正在尝试开发一个小程序,它将与串行端口上的设备进行通信。该程序将负责格式化用户输入的数据并读取和显示设备接收到的值。我是 WPF 和 MVVM 的新手,并且对整个数据绑定(bind)/XAML 困惑有了基本的了解(我认为)。

目前我的理解是这样的:

  1. View :只有用户界面的东西。绑定(bind)到 ViewModel。
  2. ViewModel:采用模型或模型的各种属性,并以 View 可以理解的方式呈现它们。还为 View 提供了一种修改模型的方法。
  3. 模型:用户界面呈现和修改的数据。

现在我不知道是什么为 ViewModel 提供了模型,以便整个应用程序都知道模型的变化。

模型目前看起来像下面这样。我的设备有校准记录并且可以读回所有校准记录。

public class Device : ObservableObject
{
public ObservableCollection<CalibRecord> CalibRecords { get; set; }

private SerialPort sp;

public Device(SerialPort port)
{
this.sp = port;
this.CalibRecords = new ObservableCollection<CalibRecord>();
}

public void WriteCalibration(CalibRecord record)
{
/* Write a calibration record to the device */
}

public void ReadCalibration()
{
/* Read all calibration records from the device and update CalibRecords */
}
}

我正在努力寻找一个地方来放置这个家伙,以便它可以被整个应用程序访问。目前我在主窗口的 ViewModel 中实例化了它,但是除非我将它注入(inject)构造函数,否则其他 ViewModel 无法访问它。这对于几个类来说很好,但是随着 ViewModel 需要的类越多,它很快就会变得笨拙。

也许这就是所谓的“业务逻辑”或“服务层”吧。你能帮我理解将业务逻辑放在 MVVM 应用程序中的什么位置吗?或者,你们有没有我应该看的一些例子,它们关注整个应用程序(特别是业务逻辑)而不仅仅是 MVVM 的东西?

最佳答案

您对 MVVM 的理解是正确的,但是“教科书描述”没有说明服务。通常这是通过依赖注入(inject) (DI) 完成的。定义一个接口(interface) IMyDevice 并在 MyDevice 类中实现它。然后用你的 DI 容器 IMyDevice -> MyDevice 注册它。通过(正确地)使用 DI 容器,您还可以摆脱 VM 构建画面。你会有一个像这样的虚拟机:

public class MyViewModel : ViewModelBase
{
public MyViewModel(IMyDevice myDevice)
{
}
}

要获取 VM 的实例,您可以:

theDIContainer.Resolve<MyViewModel>();

它会新建 MyViewModel 类并自动解析并为您传入 IMyDevice 实例。

DI 的内容比我在这里介绍的要多得多...只是对您问题的 10,000 英里高的基本答案。阅读有关 DI 的内容,看看它如何与 MVVM 一起发挥作用。

关于C# MVVM 服务层位于何处?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31351117/

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