среда, 6 мая 2009 г.

Почему я не могу использовать один TTreeItem в нескольких местах?

Это перевод Why can't I use the same tree item multiple times? Автор: Реймонд Чен.

Это продолжение борьбы между гибкостью и простотой использования.

Вы не можете использовать один и тот же элемент дерева (tree item) в нескольких местах, потому что тогда многие свойства узла станут неоднозначными - например, свойства типа Parent или Expanded (если узел может быть в двух местах, то у него будет два родителя, один из которых может быть развёрнут, а второй - нет).

Конечно же, эта проблема может быть решена отделением содержания узла от его местоположения. Так, например, вместо просто дескриптора HTREEITEM, у нас могли бы быть, скажем, HTREENODE и HTREENODECONTENTS. Узел (node) мог бы представлять собой место в дереве, а элемент (item) мог представлять сами данные: имя, иконка и т.п.

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

Когда вы проектируете интерфейс, вы должны хотеть упростить действия для типичных сценариев, а не для редких.

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

Комментариев нет:

Отправить комментарий

Можно использовать некоторые HTML-теги, например:

<b>Жирный</b>
<i>Курсив</i>
<a href="http://www.example.com/">Ссылка</a>

Вам необязательно регистрироваться для комментирования - для этого просто выберите из списка "Анонимный" (для анонимного комментария) или "Имя/URL" (для указания вашего имени и ссылки на сайт). Все прочие варианты потребуют от вас входа в вашу учётку (поддерживается OpenID).

Пожалуйста, по возможности используйте "Имя/URL" вместо "Анонимный". URL можно просто не указывать.

Ваше сообщение может быть помечено как спам спам-фильтром - не волнуйтесь, оно появится после проверки администратором.