Сложная структура данных в слое ViewModel MVVM - PullRequest
0 голосов
/ 22 июня 2010

У меня есть большая коллекция объектов MyFile, которые различными способами связаны между собой, например, спагетти.Кроме того, из этой коллекции я создаю меньшие подколлекции некоторых предметов, которые равны по некоторым критериям.(например, все файлы с расширением .txt, все файлы, которые принадлежат определенному каталогу и т. д.) *

В основном у меня сложная структура связанных списков в моей бизнес-логике.Теперь я хочу создать ViewModel для этого, чтобы подготовить его к View, и именно здесь я ударил стену.Я просто не могу понять, как подготовить этот беспорядок и при этом сохранить все эффективно и организованно.

Первая проблема заключается в том, что оборачивая каждую коллекцию в collectionViewModel, перечисляя элемент за элементом и создавая itemViewModel, создадим дубликат itemViewModel для каждого элемента(поскольку один элемент может содержаться в нескольких коллекциях)

Вторая проблема - как сохранить все в актуальном состоянии?Если, например, item1 в бизнес-логике меняет свою ссылку с item2 на item3, то ViewModels должен соответствующим образом обновить их.

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

Спасибо

1 Ответ

0 голосов
/ 22 июня 2010

Может быть, я лаю неправильное дерево здесь, но здесь идет.

У вас может быть Модель, которая действует как хранилище для всех ваших файловых объектов, и которая также предоставляет события ItemAdded и ItemRemovedплюс метод запроса.После этого вы можете иметь общий тип ViewModel, который представляет ваше представление об этой модели (ViewModel), но специализируется на составлении запроса.Таким образом, вы можете иметь экземпляр ViewModel + Query (например, все файлы с расширением txt) для каждого представления, которое вы хотите представить.ViewModel будет отвечать за выполнение запроса к вашей модели (путем вызова метода запроса), а затем превращать результаты в наблюдаемую коллекцию элементов файла (или что у вас есть).Вы можете обновить вашу ViewModel в ответ на изменения модели, подписавшись на события ItemAdded и ItemRemoved.Если в событии ItemRemoved ваша коллекция элементов файла ViewModel содержит этот элемент, удалите его.Если в событии ItemAdded элемент соответствует условию запроса для этого экземпляра ViewModel, добавьте его в коллекцию.

Это позволит вам иметь одну модель для всех ваших файлов, а затем ViewModel (+ Query)экземпляр для каждого типа представления, которое вы хотите представить.События ItemAdded и ItemRemoved позволяют обновить вашу ViewModel.Поскольку элементы в моделях представления являются наблюдаемыми коллекциями, ваши представления с привязкой к данным обновятся сами.

...