Conversation
|
По хорошему правильно было бы еще при begin заменять все cache'ы на какой-то внутренний runtimememory кэш. При commit/rollback возвращать обратно тот который был. |
|
"Грубо" реализовал описанный выше кейс. Причина: внутри транзакции может происходить, грубо говоря, всякое. И это всякое не должно попадать в общий кэш и вообще не должно работать с общим кэшом. Соотвественно на время работы внутри транзакции приложению необходимо давать отдельный кэш. |
There was a problem hiding this comment.
Меня смущает момент array(array($id), $workerUncacher);
Мож отдельный класс сделать к примеру CacherMedium::create()->setIds(array $ids)->setWorker($workerUncache)
ммм ?
There was a problem hiding this comment.
Можно просто массив заменить на ассоциативный. Типа
array('ids' => array($id), 'workerUncacher' => $workerUncacher);
Честно говоря не нашел пользы от такого вариант для внутренней реализации класса и не сделал. Стоит сделать?
Про отдельный класс не совсем понял, но попробую ответить про использование сеттеров вместо конструктора: сейчас $id и $worker нужно в объект добавить лишь один раз при создании, а потом только объединять анкешеры между собой в один.
|
Тесты работают ? ))) |
|
Тесты работают. Большой вредный DaoTest как раз покрывает всякие кэширования. В нем ничего не изменилось, но раз тесты проходят, значит все что было заложено ранее раскешивается когда надо. Извращенные случаи - это которые именно? |
|
Для удобства переребейзиваю, перегруппировываю в один коммит и мержу. |
По мотивам тикетов о TaggableDaoWorker'е (#85) и о позднем раскешивании в случае транзакции (#84). Собственно код вычленен из #85, т.к. вполне идет на отдельный request.
Проблемы которые надо было решить:
Что и как сделано:
Собственно что меня сейчас смущает в написанном мною: