Допустим, у нас есть база "чего-то". Скажем, книжек в библиотеке, файлов на компьютере, программ на сервере, музыки и фильмов...
Нужно: обеспечить навигацию по этой базе (размер базы неограничен, но заведомо велик).
Требования к навигации:
* быстрый переход к точно известному объекту (я точно знаю, что это за файл и где он лежит)
* удобный поиск к приблизительно известному объекту (старенькая песня группы Металлика)
* предложение выбора, когда я точно не знаю, что мне нужно (а что у нас есть по C++?)
Подходы бывают такими:
1. Плоский список (наивный подход)
Просто список вообще всех объектов, какие у нас есть. Несмотря на наивность подхода, в сочетании с дополнительными графическими средствами (выделение элементов списка цветом, шрифтом, иконками) и гибкой сортировкой может быть достаточно удобен.
2. Иерархия
Случай файловой системы. Папки, в каждой — другие папки и объекты. Система, в общем, общепринятая, но обладает некоторыми недостатками.
* если папок немного (мы предполагаем, что объектов много), то в каждой из них находится большое количество объектов — возвращаемся к случаю (1) — найди свой файлик в папке где их 10 000.
* если папок много — файлы по ним распределяются, как правило, неравномерно. Возникает множество случаев вроде
Programming
Languages
Scripting
Python
Official Manuals
Python.chm
(Хотя уже внутри папки Scripting всего 8 вложенных файлов, для порядка у нее еще куча подпапок)
* логика иерархии не всегда очевидна (потому как вышеозначенный Python вполне себе мог оказаться в Web-Design/Server/Languages или еще где)
3. Поиск
Тоже понятная вещь — Гугль тебе в руки и электричку навстречу. Про достоинства и недостатки, думаю, все сами понимают.
На мой вкус, поиск вещь для большой базы необходимая, но как
единственный метод навигации, применяться не должен (пожалуйста, не приводите в опровержение Internet. А если приводите — пожалуйста, не пользуйтесь гиперссылками и закладками).
4. Ссылки
Ссылки. Имеем кучу объектов и ссылки между ними. Метод поиска нужного — от объекта к объекту по ссылкам, пока не придем куда шли.
Недостатки понятны: ссылки — вещь произвольная, длина и существование пути между двумя некоторыми объектами — величина случайная.
5. Отбор
Изначально имеем список всех доступных в базе объектов, но используя различные критерии фильтрации,
сужаем список, до объема в котором объект комфортно "найти глазами".
Мой выбор: отбор + поиск (+ опционально ссылки).
ЗЫ: на самом деле этот пост — естественно, о том, что
отбор предпочтительней
иерархии