Василий М.
Новичок
Писал свою ORM, наткнулся на косяк, связанный с кэшированием объектов во время жизни сценария.
Как раньше было: если объект доставался из базы и у него было свойство ID, то объект сохранялся
в многомерный массив в структуру типа [Модуль][Класс][ID] = object
Таким образом осуществлялось кэширование объектов и это давало результаты.
Проблема выскрылась, когда обнаружилось, что кэшировались объекты, содержащие не полные данные.
Такие объекты тоже попадали в кэш.
Соотвтетственно кэширование вида [Модуль][Класс][ID] = object
стало работать не верно, т.к. в кэше могли храниться объекты, содержащие например только свойство ID
и строка
могла бы мне выдать объект с неполными свойствами.
Возникает вопрос - как точно идентифицировать результат.
Идея - хранить SQL запрос как ключ (естественно, после всеразличных prepare и в md5) и по этому по сути уникальному ключу и проверять наличие объектов в памяти.
Я прав?
Как раньше было: если объект доставался из базы и у него было свойство ID, то объект сохранялся
в многомерный массив в структуру типа [Модуль][Класс][ID] = object
PHP:
$model = UserMapper::findById(123);
$model->name = 'Петя';
UserMapper::save($model);
// в след строке не было смысла, т.к. была бы возвращена ссылка на $model из внетреннего хранилища абстрактного маппера.
$model_1 = UserMapper::findById(123);
Проблема выскрылась, когда обнаружилось, что кэшировались объекты, содержащие не полные данные.
Такие объекты тоже попадали в кэш.
Соотвтетственно кэширование вида [Модуль][Класс][ID] = object
стало работать не верно, т.к. в кэше могли храниться объекты, содержащие например только свойство ID
и строка
PHP:
$model = UserMapper::findById(123);
Возникает вопрос - как точно идентифицировать результат.
Идея - хранить SQL запрос как ключ (естественно, после всеразличных prepare и в md5) и по этому по сути уникальному ключу и проверять наличие объектов в памяти.
Я прав?