У меня есть локальная база данных SQLite, которая содержит дерево (как вложенные множества). В приложении AIR я хочу отобразить это дерево в древовидном элементе управления и предоставить средства для изменения имен узлов и копирования, перемещения, добавления или удаления узлов.
Теперь я немного обдумываю, куда поместить код. Очевидно, у меня есть класс, который будет выполнять такие операции, как загрузка / обновление / вставка / удаление с базой данных. Это приведет к загрузке всего дерева в некоторую переменную хранения и сохранению изменений, внесенных пользователем, в базу данных.
Должен ли этот класс быть dataProvider, dataDescriptor или расширением самого элемента управления Tree? И когда пользователь запрашивает операцию, такую как добавление узла, должно ли это обновить dataProvider и позволить обработчику базы данных реагировать на событие, или он должен вызвать метод обработчика базы данных, а затем обновить dataProvider? Я бы сказал, что последнее лучше, потому что легче не обновлять данные Дерева, если что-то пойдет не так с запросом db.
Есть методы для добавления и удаления узлов в DefaultDataDescriptor и в классе Tree (защищенные методы в последнем), я должен использовать / расширять их или игнорировать их?
Причина, по которой меня это смущает, заключается в том, что, согласно документам, элемент управления Tree использует объект, хранящийся в его свойстве dataDescriptor, для анализа и манипулирования фактическими данными, которые хранятся в его свойстве dataProvider.
Это, кажется, имеет смысл, пока вы не поймете, что, если вы не подклассифицируете его, никогда не будет управлять элементом управления Tree (кроме перетаскивания, если он включен), и это не dataDescriptor, либо . Скорее во всех примерах манипулирование данными происходит непосредственно через объект dataProvider, и это вызывает обработчики событий в элементе управления Tree.
Что я здесь не понимаю?