Если вы хотите сосредоточиться на разработке своего приложения для Windows, я предлагаю вам использовать WPF.
Сделать контроллеры прозрачными в WPF очень просто.
<TextBox Width="200" Height="40" Opacity="0.5"/>
Метод, который вы сейчас используете, называется модель списка смежности .
Другой моделью для хранения иерархических данных в (реляционной) базе данных является вложенный набор модель . Его реализация в базах данных SQL хорошо известна . Также см. в этой статье модифицированный алгоритм обхода дерева предварительного порядка .
Очень простой метод: вы можете сохранить путь для каждого объекта - с их помощью будет легко запрашивать деревья в базах данных NOSQL:
{ path: "Color", ... }
{ path: "Color.Red", ... }
{ path: "Color.Red.Apple", ... }
{ path: "Color.Red.Cherry", ... }
Когда узлы будут удалены или переименованы, некоторые пути должны быть обновлены. Но в целом этот способ выглядит многообещающим. Вам просто нужно зарезервировать специальный символ в качестве разделителя. Накладные расходы на дисковое пространство должны быть незначительными.
edit: этот метод называется материализованным путем
Наконец,
У меня нет большого опыта работы с NOSQL, так что это не окончательный ответ, но вот как я подхожу к нему:
Я бы, вероятно, использовал ваш первый подход , где у вас есть:
{
dir: 'dir_name',
parent_dir: 'parent_dir_name'
}
А затем настройте map-reduce для быстрого запроса дочерних элементов каталога. Функциональность MongoDB по уменьшению карты по-прежнему доступна только в ветке разработки, и я еще не работал с ней, но в CouchDB (и я предполагаю, с некоторыми изменениями в MongoDB) вы могли бы сделать что-то вроде:
map:
function(doc) {
emit( doc.parent_dir, doc.dir );
}
reduce:
function(key, values) {
return( values );
}
Что бы даст вам список подкаталогов для каждого родительского каталога.
I suggest storing a heap to the the id's of the data items. I think this is the best plan. If you need lots and lots of stuff any heap element could be an index to another heap.
eg
{ "id:xxx", "id:yyy", "sub-heap-id:zzz"....}
If this is not clear post a comment and I will explain more when I get home.