Дизайн MVVM кажется слишком громоздким, я делаю это неправильно?

Недавно я начал создавать приложение WPF и просто надеюсь, что кто-нибудь подтвердит мне, что я построение моей общей системной архитектуры должным образом, или поправьте меня, если я куда-то еду в неправильном направлении. Тем более, что я пытаюсь сделать MVVM, здесь задействовано много уровней, и я не уверен, что делаю что-то правильно.

Вот упрощенное описание системы:

Данные хранятся в базе данных SQL Server, доступ к которой осуществляется через Linq to SQL. Допустим, база данных содержит две таблицы: USERS и USER_GROUPS . Каждая таблица имеет автоматически сгенерированный класс Linq to SQL, DB_USER и DB_USER_GROUP .

Теперь в приложении я хочу отобразить ListBox с каждым ListBoxItem , содержащим различные элементы пользовательского интерфейса для отображения / изменения информации о пользователях, что выполняется с помощью DataTemplate .

У меня есть класс модели представления для окна, который использует запрос Linq to SQL (объединяющий две таблицы) для заполнения ObservableCollection с именем UserList , который ListBox в окне привязан как его ItemsSource . Пользователь - это класс, реализующий INotifyPropertyChanged , который обрабатывает все форматирование / получение / настройку данных базы данных в соответствии с требованиями элементов управления WPF. Раздел обработки кода выглядит примерно так:

DBDataContext db = new DBDataContext();

var allUsers = from user in db.USERs
                   .Where(u => u.ENABLED == true)
               from group in db.USER_GROUPs
                   .Where(g => g.GROUPID == u.GROUPID)
                   .DefaultIfEmpty()
               select new { user, group };

foreach (var user in allUsers)
{
    User u = new User(db, user.user, user.group);
    UserList.Add(u);
}

Итак, класс User построен с частными свойствами для DB_USER , DB_USER_GROUP и базы данных DataContext класс. Все общедоступные свойства пользователя в основном обертывают соответствующие столбцы, с их методами get , возвращающими значения для использования WPF, и set , изменяющими столбец ( s), а затем вызов SubmitChanges () для частного свойства DataContext для обновления базы данных.

Все работает нормально, но кажется немного громоздким, поэтому мне просто интересно, не пропустил ли я что-нибудь, что могло бы сделать его чище. В частности, хранение DataContext внутри каждого элемента UserList кажется странным, но я не был уверен в лучшем способе обновления базы данных при изменении данных в пользовательском интерфейсе.

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

7
задан Chad Birch 8 December 2011 в 15:28
поделиться