об удобстве иерархических структур данных
DESCRIPTION
План выступления: 1. Зачем? 1. Проектированием хранилищ данных занимается почти каждый. 2. В начале проекта сложно представить, какие новые требования появятся через месяц. (КО напоминает) 3. "Много думать" - бессмысленно, все равно все поменяется. 4. Нужна схема, которую можно будет легко расширять и перетасовывать. 5. Дерево объектов - искомая структура. 2. Примеры деревьев (иерархических структур): 1. Организационная диаграмма. 2. Файлы и папки на диске 3. Файлы и папки - отличная метафора, от которой мы и будем плясать. На диске успешно хранится все, что нужно. Аналогично любые данные хорошо укладываются в дерево. 4. Пример №1 1. Традиционное проектирование. Рисуем UML-диаграмму: новость, каталог новостей, иерархия разделов каталога, страны, к которым принадлежат разделы, описания стран. 2. Выражаем то же самое в виде дерева объектов "статья", "папка", "страна". 3. Такое дерево реализуется примитивнейшей структурой классов - класс Node и его наследники. 1. Как следствие, для моделирования иерархической структуры диаграмма классов не подходит. 5. Полезные операции в дереве объектов: 1. Найти объект по пути. Путь - это последовательность ребер. Полный аналог пути к файлу. 1. Объект может иметь осмысленный путь - это удобно для пользователя. 2. Выбрать все объекты заданных типов, находящиеся в указанной ветви дерева. 1. Одна и та же операция позволяет выбрать все новости про заданную страну или все новости из указанной категории. 3. Наследование свойств вниз по дереву: 1. Конфигурационные настройки. 2. Роли пользователей. 6. Переход от дерева к ориентированному графу 1. Дерева (один родительский узел) не всегда достаточно. 2. Пример - новость может принадлежать нескольким разделам сразу. 3. Надо позволить узлу иметь нескольких родителей - получаем ориентированный граф. 4. Не должно быть циклов 1. Циклы создают проблемы. 2. В них нет никакого смысла для целей хранения данных. 7. Объект Relation - на диаграмму классов, моделирующих дерево добавляем новый класс: parent, child, name. 1. name - имя отношения, которое можно использовать при поTRANSCRIPT
Об удобстве иерархических структур данных
Андрей МайоровBYTE-force
twitter.com/xorets
Разработка хранилища данных
http://www.halloweenforum.com/tutorials-step-step/69135-pallet-wood-toe-pincher-coffin.html
«База данных»
http://www.flickr.com/photos/shindotv/3835365695/
Гибкая схема
http://www.flickr.com/photos/lofink/4501610335/
Дерево объектов
http://www.flickr.com/photos/tamburix/3128183211/
(Иерархическая структура)
Тоже иерархическая структура
http://www.flickr.com/photos/rufo_83/3154516530/
Организационная диаграмма
http:
//w
ww
.flic
kr.c
om/p
hoto
s/36
4988
26@
N02
/432
4885
147/
Папки и файлы на диске
«Папки» и «файлы» – все что нужно
http://www.flickr.com/photos/kblog/231146020/
«Международные Новости»
+Дата+Заголовок+Текст
Новость
+Название
КатегорияНовостей
* 1 *
+parent1
+Название
Страна
*
1
+Название+Текст
Описание +about
* 1
«Международные Новости»/
О стране
Страна
Категория
НовостьКатегория
Новость
Папка
Статья
Страна0..*
0..*
0..*
0..*
0..*
0..*
«Международные Новости»/
О стране
Страна
Категория
НовостьКатегория
Новость
Папка
Статья
Страна0..*
0..*
0..*
0..*
0..*
0..*
«High tech news»/
Описание
Индустрия
Компания
НовостьAbout
Папка
Статья
0..*
0..*1
0..*
0..*
«The Poupkine’ Times»/
Описание
Индустрия
Компания
НовостьAbout
Папка
Статья
0..*
0..*1
0..*
0..*
О стране
Страна
Категория
НовостьКатегория
Новость
0..*
0..*
0..*
0..*
0..*
0..*
Структура классов
Узел
*
+parent1
+Название
Папка
+Дата+Название+Текст
СтатьяКорень
Операции с деревом
http://www.flickr.com/photos/hemmob/459937668/
Путь до объекта
/news/industry/it/addconf
Выборки из ветви
Папка
Статья
Наследование свойств
vasya – adminpageSize = 10
Одного «ствола» недостаточно
http://www.flickr.com/photos/stretchdog/2405956063/in/photostream/
Направленный граф/
Политика
Новости
Погода
Международный саммит залило дождем
Папка
Статья
Направленный ациклический граф/
Политика
Новости
Погода
Международный саммит залило дождем
Папка
Статья
Класс «Отношение»
Объект
+Название
Папка
+Дата+Название+Текст
СтатьяКорень
+имя
Отношение
+parent
1 *+child
1 *
Типы отношений
http://www.flickr.com/photos/hawee/4119367196/
parent-child/
Политика
Новости
Погода
Международный саммит залило дождем
link/
Политика
Новости
Погода
Международный саммит залило дождем
aggregate/
Политика
Новости
Погода
Международный саммит залило дождем
Каталог товаров/
Шубки
Каталог
Шапки
Ушанка
Папка
Статья
Товар
С капюшоном Дубленка
Рецензия
Каталог товаров и магазин/
Шубки
Каталог
Шапки
Ушанка
Папка
Статья
Товар
С капюшоном Дубленка
РецензияЦенник
Магазин Магазин
Ценник
Ценник
Каталог и 2 магазина/
Папка
Статья
Товар
$2
Магазин 2
Магазин
Ценник
$1
Магазин 1
$3 $10
3 категории связей
parent-child
link aggregate
Тип связи «tag»/
Международные
Новости
Международный саммит залило дождем
Папка
Статья
Погода Политика
Тэги
Специальные связи
Действия с объектами
http://www.flickr.com/photos/robwallace/304247667/
Перемещение объекта
Копирование объекта
Копирование объекта
Copy
Копирование объекта
Copy
Да, связь забыли скопировать.
ё
Копирование объекта
ё
Копирование объекта
Удаление объектов/
Шубки
Каталог
Шапки
Ушанка С капюшоном Дубленка
РецензияЦенник
Магазин
Ценник
Удаление объектов/
Шубки
Каталог
С капюшоном Дубленка
Рецензия
Магазин
Ценник
http://www.flickr.com/photos/jonk/218546277/
Найди 10 отличий
parent-child aggregate
Резюме
• Дерево объектов – простая структура• Устойчива к изменению требований• Понятна пользователю,
как файловая система • Используем 9 лет – нравится
ПО «Тематик»/
Offer
Provider
Department
User
Customer
Department
User
Theme
Request
User
1
0..*
0..* 0..1
1..*1..*
1..* 1..*
1..*0..*
1..* 1..*
0..*
1..*
0..*
0..*
SDF
Фреймворк для разработки сайтов, построенный по этому принципу.
+Универсальная CMS для программистов
Спасибо за внимание
Андрей МайоровBYTE-force
[email protected]/xorets
Если вам нужна эта презентация – напишите мне