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

У меня возникла небольшая анархо-архитектурная проблема: я работаю над небольшим проектом, который, помимо прочего, включает в себя ввод и сохранение данных, при использовании 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?) - keepiОтслеживание удаленных элементов можно, вероятно, обработать, сохранив редактируемые элементы в ObservableCollection, обработав событие CollectionChanged и добавив удаленные элементы в отдельный список?

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

1 Ответ

1 голос
/ 15 ноября 2010

Прежде всего

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

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

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

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

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

...