Delphi: имитация структуры данных MS OneNote - PullRequest
1 голос
/ 23 июня 2009

MS OneNote использует иерархию данных, которая по существу является простым деревом, даже если информация отображается через интерфейс с вкладками, а не в виде дерева. Вы начинаете с «блокнотов», которые могут иметь «разделы», в которых есть «страницы». Я пытаюсь смоделировать это. В моем случае страница будет связана с содержимым RichEdit.

Моя проблема не в том, что я не могу найти способ сделать это. Моя проблема в том, что я не уверен, какая из нескольких возможностей в конечном итоге окажется самой простой. Вот где я надеюсь, что вы войдете.

Я мог бы, например, использовать обычную базу данных [MyBase]. Набор данных Page будет содержать поля для его имени и данные RichEdit. Страницы будут вложены в разделы, а разделы - в блокноты.

Если я некоторое время думал об этом, то кажется, что это то, что можно было бы смоделировать и с помощью простых строковых списков, особенно если бы каждый элемент в списке содержал запятые для идентификатора и позиции в иерархии, а также блокнот / раздел / название страницы.

Но тогда это также кажется чем-то, что могло бы хорошо подойти для XML ... если бы я хотел узнать больше об XML: -)

Что вы, более опытные, думаете?

Спасибо, как всегда ...

Ответы [ 5 ]

3 голосов
/ 23 июня 2009

Если вы используете базу данных или XML, попробуйте поместить свои процедуры доступа к данным в модуль данных. Позвольте вашему подразделению (ям) графического интерфейса вызывать открытые методы модуля данных и убедитесь, что эти вызовы не зависят от того, как хранятся ваши данные. Таким образом, вы можете начать с одного подхода и переключиться на другой, просто отредактировав свой модуль данных.

3 голосов
/ 23 июня 2009

Вы можете попробовать использовать структурированную систему хранения. Концепция проста: вы работаете с файлом данных так же, как с диском и папками ... дело в том, что все папки и файлы находятся под вашим исключительным контролем. Единственная проблема заключается в том, что он не очень хорошо масштабируется для нескольких пользователей, но и XML тоже. (хорошая библиотека структурированного хранилища доступна в gabr blog )

Для "многопользовательской" системы лучшим вариантом будет использование таблиц. Вы, вероятно, сможете хорошо начать работу с Microsoft Access и ADO, которые очень легко переходят на MS Sql Server. Из вашего краткого описания, я ожидаю, что у вас будет три таблицы, тетради, разделы, страницы. Страницы будут иметь отношение внешнего ключа (деталь / мастер) к разделам, а разделы будут иметь отношение внешнего ключа с блокнотами.

2 голосов
/ 23 июня 2009

Если вы храните его в файловой системе, почему бы не использовать .... папки? Это то, что делает OneNote. «Записная книжка» и «группа разделов» - это просто обычные папки файловой системы. Единственный другой уровень - это раздел .one. Там очень ограниченная иерархия (это просто страницы, любые из которых можно пометить как подстраницы, но они никак не связаны с родителем).

Внутри файла .one вы можете использовать XML для представления своих страниц, хотя OneNote это не делает. OneNote использует двоичный формат файла для обеспечения быстрого редактирования, синхронизации на уровне объектов, многопользовательского доступа и компактного хранения.

Если вы посмотрите информацию о «файлах произвольного доступа», вы сможете получить представление о том, как это сделать. Но старайтесь избегать использования XML, если вы думаете, что он может стать большим, потому что это станет громоздким, чтобы вносить изменения. Вам нужно будет загрузить весь XML-файл, внести изменения в память, а затем снова записать все обратно.

2 голосов
/ 23 июня 2009

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

Если вы хотите, чтобы пользователь сохранял данные локально в файловой системе, я думаю, что XML будет хорошим решением, поскольку он позволяет хранить данные в структурированном файле.

Итак ... как вы хотите, чтобы пользователь сохранял и использовал данные?

1 голос
/ 23 июня 2009

Я думаю на твоих данных, как дерево.

node { 
    id
    parent_id
    content
    type
}

узлы с paren_id = 0 являются записными книжками. Тип не является обязательным, но может быть полезным. содержимое страницы и блокнота бесплатно предоставит вам описание страницы / блокнота: D

Я буду использовать простую таблицу на sqlite или MyBase или что-то еще. Я думаю, что маленькая БД лучше, чем Xml, потому что xml заставляет вас загружать все данные в память.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...