-
Notifications
You must be signed in to change notification settings - Fork 52
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Uncachers #91
Uncachers #91
Conversation
По хорошему правильно было бы еще при begin заменять все cache'ы на какой-то внутренний runtimememory кэш. При commit/rollback возвращать обратно тот который был. |
"Грубо" реализовал описанный выше кейс. Причина: внутри транзакции может происходить, грубо говоря, всякое. И это всякое не должно попадать в общий кэш и вообще не должно работать с общим кэшом. Соотвественно на время работы внутри транзакции приложению необходимо давать отдельный кэш. |
|
||
public function __construct(GenericDAO $dao, $id, UncacherBase $workerUncacher) | ||
{ | ||
$this->daoMap[get_class($dao)] = array(array($id), $workerUncacher); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Меня смущает момент array(array($id), $workerUncacher);
Мож отдельный класс сделать к примеру CacherMedium::create()->setIds(array $ids)->setWorker($workerUncache)
ммм ?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Можно просто массив заменить на ассоциативный. Типа
array('ids' => array($id), 'workerUncacher' => $workerUncacher);
Честно говоря не нашел пользы от такого вариант для внутренней реализации класса и не сделал. Стоит сделать?
Про отдельный класс не совсем понял, но попробую ответить про использование сеттеров вместо конструктора: сейчас $id и $worker нужно в объект добавить лишь один раз при создании, а потом только объединять анкешеры между собой в один.
Тесты работают ? ))) |
Тесты работают. Большой вредный DaoTest как раз покрывает всякие кэширования. В нем ничего не изменилось, но раз тесты проходят, значит все что было заложено ранее раскешивается когда надо. Извращенные случаи - это которые именно? |
Для удобства переребейзиваю, перегруппировываю в один коммит и мержу. |
По мотивам тикетов о TaggableDaoWorker'е (#85) и о позднем раскешивании в случае транзакции (#84). Собственно код вычленен из #85, т.к. вполне идет на отдельный request.
Проблемы которые надо было решить:
Что и как сделано:
Собственно что меня сейчас смущает в написанном мною: