onPHP/onphp-framework — pull request #85 by AlexeyDsov (2012-04-16 07:42:29+00:00)
Title: TaggableDaoWorker

Обещанный TaggableDaoWorker.
Сделан что бы можно было завязывать запрос на несколько тегов и при изменении любого из них считать кэш неактуальным.
Немножко за последние две недели закопался с программированием, стало что-то меньше свободного времени, поэтому оно еще недопиленно и требует обсуждение доработок.
Этот класс делали когда-то я и @lom и во этом году я наконец взялся допиливать его.
На неделе написал пару страничек в вики про всякое [кэширование](https://github.com/onPHP/onphp-framework/wiki/Ru:Caches) и [TaggableDaoWorker + TaggableSmartHandler](https://github.com/onPHP/onphp-framework/wiki/Ru%3ATaggableSmartHandler)

Текущие скользкие вопросы по изменениям в этом реквесте:

1. Из старого кода TaggableDaoWorker'а выпилены блокировки запросов, но в коде еще есть закомментированные строки.
1. TaggableDaoWorker работает только если OneToOne связи между объектами - lazy.
1. Так же он может быть не особо совместим с другими кэшами. Т.е. если часть объектов кэшируется им, а часть другими воркерами. Другие вокреры не будут страдать, а вот у TaggableDaoWorker'а в случае использования TaggableSmartHandler'а раскешивание нарушится.
1. lazy - сделал более lazy - не уверен что все к этому готовы, т.к. одно из свойств lazy теряется, см. DAOTest 836-ую строку.
1. В BaseDao добавлен метод getUncacheByIdFunc и в GenericDAO теперь используется он при изменении объекта. Метод возвращает анонимную функцию, которая выполняет раскешивание при вызове. Возможно, правильней что бы возвращалась не функция, а какой-то специальный объект, что бы можно было несколько таких объектов можно было "мержить" друг с другом.
1. может быть еще что-то, что сходу не вспомнил, добавлю позже.

В общем то жду комментариев и обсуждения и потихоньку буду допиливать дальше. Скорее всего, если никто не будет против, изменю getUncacheByIdFunc как описал выше.