Справка по архитектуре: интерфейс ввода данных wpf / mvvm для пользовательского веб-сервиса json

У меня возникла небольшая анархитектурная проблема: я работаю над небольшим проектом, который, помимо прочего, включает в себя ввод и сохранение данных с помощью DAL, использующего веб-сервис с настраиваемым протоколом JSON. Пока все хорошо, и было бы относительно несложно собрать какой-нибудь быстрый и грязный DataTable + DataGrid код и покончить с этим.

Однако это обучающий проект, и я пытаюсь понять, как сделать несколько более чистый дизайн, в частности MVVM с графическим интерфейсом WPF, используя платформу Caliburn.Micro. Серверная часть исправлена, но я делаю всю клиентскую часть, включая DAL.

С помощью комбинации DG + DT довольно легко внести кучу правок в DG, а когда пользователь фиксирует, просто повторяйте Rows, проверяя свойство RowState и запуская методы создания / обновления / удаления DAL по мере необходимости. DataTable не кажется очень удобным для привязки данных MVVM, и задействованные модели ViewModels не должны заботиться о том, с каким типом управления пользовательским интерфейсом они используются ... учитывая, что постоянство осуществляется через веб-сервис, требующий пакетной фиксации изменений кажется Впрочем, достаточно разумно.

Итак, я обдумываю свои варианты дизайна.

Насколько я понимаю, DAL должен иметь дело с объектами уровня модели (я не думаю, что необходимо вводить DTO для этого проекта), и они будут заключены в ViewModels перед привязкой к данным в редакторе ViewModels.

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

Я также поиграл с идеей сохранения свойств IsModified и IsNewlyCreated (я полагаю, они войдут в ViewModel?) - отслеживание удаленных элементов, вероятно, можно было бы обрабатывать, сохраняя редактируемые элементы в ObservableCollection, обрабатывая событие CollectionChanged и добавление удаленных элементов в отдельный список?

Как видите, я не знаю, как с этим справиться, и буду благодарен за любые предложения :)


person snemarch    schedule 15.11.2010    source источник


Ответы (1)


Прежде всего

1- Не вносите никаких изменений, пока не достигнете точки, когда вы не можете жить без изменений кода.

2- Как вы уже сказали, вы создаете учебный проект и хотите более модульное приложение, поэтому мои мысли будут вращаться вокруг того, как сделать мое приложение более модульным, прежде чем углубляться в детали реализации.

3- Рассматривали ли вы использование фреймворка Prism + MVVM?

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

5- Если вы еще не уверены в использовании DataTable, используйте ObservrableCollection для привязки данных к сетке. ObservrableCollection не уведомляет об изменении отдельного элемента, он уведомляет только о добавлении или удалении элемента.

person TalentTuner    schedule 15.11.2010
comment
1: этап проектирования / прототипа, изменения в порядке. 3: Фреймворк Caliburn.micro, не знаете, что мне даст Prism? 4: будет работать, но кажется немного грязным и требует преобразования между таблицей и объектом модели. 5: да, и BindingList выдаст мне уведомление об изменении элемента, но имеет довольно бесполезное уведомление об удалении элемента (index удаленного элемента после его удаления) - person snemarch; 15.11.2010