Windows MVP шаблон MVVC, как вписать логику кода в этот шаблон - PullRequest
0 голосов
/ 26 февраля 2019

Сейчас я работаю над преобразованием существующего приложения winform в WPF.Я никогда не кодировал ничего, используя паттерн MVVC, и мне трудно понять, как правильно настроить модели, модели и представления в моем конкретном случае.Приложение, которое я хочу конвертировать, используется для связи с физическими устройствами через последовательный порт.Давайте сначала начнем с существующего приложения winform.Практически любая логика находится в отдельном файле .dll, который предоставляет интерфейс, который использует winform.При отображении данных действительно нет «кода позади», потому что dll уже предоставляет все, что нужно.В GUI есть только несколько дополнительных функций для манипулирования данными, сохранения текущих данных и т. Д.

Дело в том, что я действительно не понимаю, как это прекрасно вписать в MVVM.Как модель, насколько я понимаю, мне нужно создать какое-то, скажем, устройство, которое будет иметь все свойства, которые можно изменять и читать.И первый вопрос, если модель должна быть конкретным классом или это может быть какой-то интерфейс (который у меня уже есть) или, может быть, абстрактный класс устройства (который реализует этот интерфейс)?

Второй вопрос о ViewModels.Я понимаю, что ViewModel каким-то образом используется для «склеивания» данных модели для просмотра.И с этой точки зрения в ViewModel я могу поместить весь код, который в результате форматирует данные с устройства, чтобы выводить их в несколько хороших форматов, которые будут легко добавлены в View.Но здесь есть странность.Я думаю, что этот интерфейс, который я сейчас использую в этом DLL-файле, прекрасно подходит для привязки данных в графическом интерфейсе (или, может быть, нет?).

Другой вопрос касается самого View.Я понимаю, что View не будет знать о модели и т. Д. Но могу ли я представить тот код, который у меня уже есть в графическом интерфейсе winform?(для сохранения данных в CSV-файлы, для выполнения некоторых измерений и т. д.) или, возможно, мне нужно будет создать другую модель (я понятия не имею, как она может выглядеть).

И последний вопрос: куда поставитьвся логика использования последовательного порта, для конкретной реализации всех функций и т. д. Я считаю, что модели должны быть максимально простыми (как в mvc pattern) без какой-либо логики и т. д. (но, опять же, если так будет,может быть модель должна быть только интерфейсной?).И ViewModels должен иметь только код для манипулирования данными, чтобы представлять данные в удобном формате для просмотра и преобразования их обратно в модель.Так где же остальная логика должна существовать?Спасибо всем заранее за объяснение этой вещи.И для того, чтобы добавить код в мой пост, ниже приведен интерфейс, который я использую в этом DLL-файле

public interface IScope
{
    event EventHandler NewDataInBuffer;
    bool Destroy();
    bool Connect();
    bool Disconnect();
    bool StartCapture();
    bool StopCapture();
    string ScopeName { get; }
    IParameter<float> CurrentVoltageLimit { get; }
    IParameter<int> DataSamplesPerDiv { get; }

    List<IParameter<Config.Timebase>> AvailableTimebaseSettings { get; }
    List<IParameter<Config.Coupling>> AvailableCoupleSettings { get; }
    List<IParameter<Config.Slope>> AvailableTriggerSlopeSettings { get; }
    List<IParameter<Config.VerticalSensitivity>> AvailableSenitivitySettings { get; }
    List<IParameter<Config.TriggerMode>> AvailableTriggerModeSettings { get; }
    List<IParameter<Config.RecordLength>> AvailableRecordLength { get; }


    IParameter<Config.Timebase> TimeBase { get; set; }
    IParameter<Config.Coupling> Couple { get; set; }
    IParameter<Config.Slope> TriggerSlope { get; set; }
    IParameter<Config.VerticalSensitivity> Sensitivity { get; set; }
    IParameter<Config.TriggerMode> TriggerMode { get; set; }
    IParameter<Config.RecordLength> RecordLength { get; set; }
    int TriggerPosition { get; set; }
    float TriggerLevel { get; set; }
}


public interface IParameter<T>
{
    string ParameterName { get; }
    string ParameterValue { get; }
    string ParameterUnit { get; }
    bool IsReadOnly { get; }
    T GetParameter { get; }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...