我正在尝试开发一个小程序,它将与串口上的设备进行通信。该程序将负责格式化用户输入的数据以及读取和显示设备接收的值。我对WPF和MVVM相当陌生,并且已经对整个数据绑定/ XAML混乱(我认为)有了基本的了解。C#MVVM服务层在哪里坐?
目前我的理解去是这样的:
- 查看:UI唯一的东西。绑定到ViewModel。
- ViewModel:采用模型或模型的各种属性,并以View可以理解的方式呈现它们。还为视图修改模型提供了一种方法。
- 型号: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的东西?
就我个人而言,我会在您的解决方案中使用一些接口创建一个服务层(项目),以促进依赖注入到使用服务功能的应用程序区域,同时这也简化了服务的单元测试。 – Shawn