У меня есть простая система 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 для сохранения свойств. Кроме того, существуют очень сложные алгоритмы для обработки истекающих сроков действия этих кэшей. Это ужасно запутанно, и я хотел бы рефакторинга в более чистое решение / структуру данных.
Есть ли у кого-нибудь идеи?
Спасибо!