C# MVVM 服务层位于何处?

2024-03-06

我正在尝试开发一个小程序,它将与串行端口上的设备进行通信。该程序将负责格式化用户输入的数据并读取和呈现设备接收到的值。我对 WPF 和 MVVM 还很陌生,并且已经对整个数据绑定/XAML 混乱有了基本的了解(我认为)。

目前我的理解是这样的:

  1. View:仅 UI 的东西。绑定到 ViewModel。
  2. ViewModel:采用模型或模型的各种属性,并以视图可以理解的方式呈现它们。还提供了视图修改模型的方法。
  3. 模型:UI 呈现和修改的数据。

现在我不知道什么为 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 中实例化了它,但其他 ViewModel 无法访问它,除非我将它注入到构造函数中。这对于几个类来说很好,但 ViewModel 需要的类越多,很快就会变得笨拙。

也许这就是所谓的“业务逻辑”或“服务层”。您能帮助我了解将业务逻辑放在 MVVM 应用程序中的何处吗?或者,你们有一些我应该看的示例,这些示例重点关注整个应用程序(特别是业务逻辑)而不仅仅是 MVVM 内容吗?


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

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

要获取虚拟机的实例,您可以执行以下操作:

theDIContainer.Resolve<MyViewModel>();

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

DI 的内容还有很多,我在这里介绍的只是一个基本的 10,000 英里高度答案。阅读 DI 并了解它如何与 MVVM 一起发挥作用。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C# MVVM 服务层位于何处? 的相关文章

随机推荐