我正在嘗試開發一個小程序,它將與串口上的設備進行通信。該程序將負責格式化用戶輸入的數據以及讀取和顯示設備接收的值。我對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