Изменение существующей инфраструктуры MVVM путем добавления функции просмотра состояния - PullRequest
2 голосов
/ 12 сентября 2011

Я собираюсь представить функцию View State в существующем приложении MVFM WPF. Цель состоит в том, чтобы иметь возможность сохранять и загружать (восстанавливать) определенное состояние элемента управления.

Вопрос больше в дизайне и лучшем решении с точки зрения гибкости / удобства обслуживания системы.

Текущая инфраструктура:

public abstract class ViewModelBase
{
   protected ViewModelBase(...)
   {
   }
}

// and few more very the same ViewModel classes for different control types
public sealed class GridViewModel : ViewModelBase
{
   protected GridViewModel(...) 
      : base(...)
   {
   }
}

Я представил IViewState interface, чтобы каждый конкретный ViewModel мог предоставить собственную реализацию, такую ​​как GridViewState class, и собирался поместить ее в инфраструктуру ViewModel следующим образом: (Идея состоит в том, чтобы передать тип ViewState в качестве универсального параметра)

public abstract class ViewModelBase<TViewState>
  where TViewState : class, IViewState
{
   protected ViewModelBase(...)
   {
   }

  public TViewState ViewState { ... }
}
  1. Является ли хорошей идеей присоединить функцию View State к ViewModel?
  2. Это хорошее решение для введения взаимосвязи между определенными типами ViewModel и ViewState через общий параметр Type, такой как class GridViewModel<GridViewState>?
  3. Где и почему лучше определить такие методы, как LoadState() / SaveState(), IViewState или ViewModelBase?
  4. Есть ли другие дизайнерские решения?

1 Ответ

1 голос
/ 13 сентября 2011

Есть ли причина, по которой вы не сохраняете свои доменные объекты и просто перестраиваете ViewModels из тех, которые загружаются?Какое состояние будет иметь ваше мнение, что классы вашего домена не будут?Если это связано с визуальными элементами, такими как положение и местоположение, я бы вставил их в класс настроек и сохранил это.

Я предполагаю, что есть некоторая базовая логика и классы, которые представляют ваш домен, если нет, то ваши ViewModels действительно являются вашим доменом, и ваша идея ясна.

Я бы, вероятно, посмотрел бы что-то вроде шаблона memento для регидратации ваших виртуальных машин, поскольку они, вероятно, будут иметь справедливуюнесколько событий и других отношений (например, события изменения свойств элементов коллекции), которые не могут быть сериализованы и должны быть воссозданы.

Существует множество паттернов персистентности, но, судя по именам и пояснениям, выглядит хорошоподходит.

...