Хабы: Веб-разработка,Разработка,Блог компании InterSystems
Уважаемые разработчики Caché, Ensemble и DeepSee!
Компания InterSystems анонсирует выход в свет нового ресурса о технологиях InterSystems — Developer Connection!
Основная концепция ресурса — собрать на одном сайте всевозможные технические документы о технологиях InterSystems, а также разработчиков всего мира, так или иначе использующих технологии InterSystems.
Читать дальше →
Сейчас работаю над доработкой/переписыванием проекта, который был написан, ну скажем так, «не совсем грамотно». По ходу есть задача оптимизировать работу, т.к. код изначально был написан крайне неоптимально. Среди работ по оптимизации прикручивается кэш.
В проекте есть несколько разных источников данных, результаты работы которых хорошо было бы кэшировать, основной — конечно БД. Хотелось решения прозрачного, с минимальной кровью. В один прекрасный момент надоедает писать конструкции вида
$query = "Select something";
$result = $cache->get($query, $tag);
if (!$result) {
$result = $db->queryAll($query);
$cache->set($query, $tag);
}
И хочется чего-то другого. Конечно, код можно вынести в отдельную функцию или метод, но это как-то скучно и к тому же, для каждого разного вызова (а там есть не только $db->queryAll, а несколько разных вариантов) нужен будет свой код и своя функция/метод.
С другой стороны, добавлять код кэширования непосредственно в источники данных тоже не очень правильно — в конце концов, они этим не должны заниматься (именно поэтому Трейты тоже не подходят). Создавать отдельный класс кэша тоже не очень удобно.
В общем, хотелось единого, универсального решения, которое бы подошло для разных источников данных, с разными интерфейсами, но в то же время было единообразным. Было решено сделать «волшебный» декоратор.
Читать дальше →