Как лучше всего наследовать свойства в древовидной структуре?

У меня есть простая система CMS, которая имеет простую древовидную иерархию:

У нас есть страницы от A до E, которые имеют следующую иерархию: A -> B -> C -> D -> E

Все страницы относятся к одному классу и имеют отношения родитель-потомок.

Теперь предположим, что у меня есть свойство, которое я хочу унаследовать среди страниц. Предположим, что A — красный: A (красный) -> B -> C -> D -> E

В этом случае от B до E унаследует «красный».

Или более сложные сценарии: A (красный) -> B -> C (синий) -> D -> E

B унаследует красный, а D/E будет синим.

Как лучше всего решить что-то подобное? У меня есть древовидная структура с более чем 6000 листьев, и около 100 из этих листьев имеют наследственные свойства. Эти 100 или около того листьев сохраняют свои свойства в базе данных. Для листьев без явных свойств я ищу предков и использую memcached для сохранения свойств. Кроме того, существуют очень сложные алгоритмы для обработки истекающих сроков действия этих кэшей. Это ужасно запутанно, и я хотел бы рефакторинга в более чистое решение / структуру данных.

Есть ли у кого-нибудь идеи?

Спасибо!

7
задан chuboy 11 March 2011 в 06:07
поделиться