Я бы тоже не использовал его. Модель должна содержать значимые данные, которые в этом случае будут данными, которые вы читаете из последовательного порта. Хороший подход заключается в создании объекта, который абстрагирует то, на что вы воздействуете, на целевом устройстве.
Допустим, вы работаете с одним из цифровых весов с последовательным портом. Вы хотите, чтобы методы считывали текущий вес и устанавливали текущее время с помощью методов. Это сохраняет всю вашу сериализацию и десериализацию в одном месте, чтобы вы не передавали порт, необработанные байты или другие вещи. Вот пример (подробности, обработка ошибок исключена):
// Model
public class WeightReport
{
public float Weight { get; set; }
public string Units {get; set; }
}
// Port service
public class MyScale
{
private SerialPort _port;
public MyScale()
{ /* Setup port */ }
public WeightReport ReadWeightReport()
{
var resp = _port.ReadBytes(/* however many bytes */);
// or make a factory, static parser, whatever
var report = new WeightReport(resp);
return report;
}
}
// ViewModel
public class MyViewModel
{
private MyScale _scale;
public WeightReport LastRead { get; set; }
// Add events, delegates, background thread, methods etc. to update LastRead
}
Конечно, есть много способов сделать это, и это действительно зависит от вашего стиля и от того, сколько вы ожидаете от этого приложения.