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