Browse Source

fix identity map

Ivan Asmer 6 years ago
parent
commit
9dd994a24f
1 changed files with 5 additions and 3 deletions
  1. 5 3
      MVCHW.md

+ 5 - 3
MVCHW.md

@@ -64,7 +64,7 @@ $comment->save();
 
 ### Объект
 Каждый объект класса является сущностью, связанной с конкретной записью в таблице
-Объект должен уметь:
+Объект `Model` должен уметь:
 - используя магические `__set` и `__get` считывать и задавать поля записи из СУБД (`$post->title = 'POST TITLE'`) 
 - уметь сохраняться с помощью метода `save`. Метод `save` должен уметь исходя из известной структуры таблицы сформировать корректный `UPDATE` или `INSERT` для сохранения записи.
 
@@ -76,8 +76,10 @@ $comment->save();
 Сделайте так, что бы имя первичного ключа у вас извлекался из СУБД с помощью `DESC TABLE` и в дальнейшем используйте его как статическую переменную, каждую для своего класса-наследника `Model`.
 
 ### Stage3
-- Добавьте флаг измененности записи (`dirty`) и не сохраняйте запись если она неизменна.
-- Добавьте **Identity Map**, для того, что бы объекты, полученные по одному и тому же первичному ключу не дублировались в памяти.
+- Добавьте флаг измененности записи (`dirty`) и не сохраняйте запись если она была изменена.
+- Добавьте **Identity Map**, для того, что бы объекты, полученные по одному и тому же первичному ключу не дублировались в памяти. **Identity Map** - механизм кэширования, который недопускает дублирования объектов, связанных с одной записью
+в СУБД в памяти. Это и более экономично по памяти, и уменьшает вероятность глюков рассинхронизации данных. Суть его проста: делаете в каждом классе `Model` статическое свойство - ассоциативный массив, ключами в котором являются idшник из 
+таблицы, а значением будет объект. При запросах (`getByPk`, например) будет создаваться объект, он сохраняется в **Identity Map** и далее при повторных запросах *отдается уже существующий объект*.
 
 ### Пожелания и советы по реализации
 #### Структура таблицы и имя первичного ключа: