Нашли или выдавили из себя код, который нельзя назвать нормальным,
на который без улыбки не взглянешь?
Не торопитесь его удалять или рефакторить, — запостите его на
говнокод.ру, посмеёмся вместе!
А как кэшировать, если Заявка окажется объектом? Сериализовать, считать контрольную сумму значения или сравнивать адрес в памяти в надежде на то, что объект иммутабельный и вероятность создания нового на старом месте невелика?
Я бы вот такое наговнокодил: сохраняю данные заявки (копирую) в статическую переменную в функции «Получения» или что-то типа того, как в питоне. Потом, когда функция снова вызывается, нужно проверить, равны ли старые и новые данные от заявок. Если равны, то не лезем в базу, а возвращаем данные из той статической пельменной.
Правда это всё соснёт по нескольким причинам сразу: многопоточность, чередующаяся обработка двух заявок и синтаксис «1С».
Да, если хранить результаты только одного вызова, переголова будет небольшой, но кэширование разобьётся о чередование обработки нескольких заявок. А если хранить несколько последних результатов, то по сложности обработки это может оказаться сопоставимым с запросом к базе.
Можно хранить их в хеш-таблице, а хеш считать от всех полей объекта. Или будет слишком медленно? Я не знаю, насколько быстро работают функции хеширования в стравнении с дёрганьем базы: я программист, а не девопс.
Это как в цикле сделать strlen в сишке или где там оно за O(n) работает?
Правда это всё соснёт по нескольким причинам сразу: многопоточность, чередующаяся обработка двух заявок и синтаксис «1С».
Можно хранить их в хеш-таблице, а хеш считать от всех полей объекта. Или будет слишком медленно? Я не знаю, насколько быстро работают функции хеширования в стравнении с дёрганьем базы: я программист, а не девопс.
Ну что, никто не знает?
Но конечно не хватает в коде GUIDов. Назовите переменную
Ага, не каждый правильно напишет слова "фианансовая" и "кальлулятор".
ДанныеКальлулятора
и
ДанныеКалькулятора
Ну и кто кому отлизал?