У нас были некоторые проблемы с производительностью в нашей программной системе, и мы внедрили класс памятки, чтобы улучшить это.Эта реализация запоминания использует аргументы вызываемого метода в сочетании с хешем объекта, а также имя вызываемого метода в качестве отпечатка для ключа кэширования.Поскольку у нас вышло много разработчиков, я могу предвидеть, что возникнет ситуация, когда запомненный метод будет зависеть от других объектов или методов / атрибутов в текущем объекте.Результаты этих зависимостей не используются в отпечатке пальца, что непреднамеренно приводит к неожиданному поведению, поскольку результат извлекается из кэша, а не пересчитывается на основе изменений в этих зависимостях.
Каков общий ожидаемый подход к работе с этими вариантами использования?Должны ли мы учить разработчиков, что запомнившиеся методы не должны использоваться с изменчивыми зависимостями, есть ли метод, который может охватывать эти изменения или что-то совсем другое?
Пример варианта использования (обратите внимание, что это не реальножизненный случай, просто чтобы продемонстрировать проблему под рукой):
<?php
class UseCase {
protected $volatileAttribute;
public function setVolatileAttribute(string $value): void
{
$this->volatileAttribute = $value;
}
public function prependAttribute(string $prepend): string
return Memoize::once(function(string $prepend) {
return $prepend . $this->volatileAttribute;
});
}
}