Browse Source

Merge branch 'master' of gitlab.a-level.com.ua:gitgod/PHP
aga

Ivan Asmer 6 years ago
parent
commit
56f22ed4e6
1 changed files with 7 additions and 4 deletions
  1. 7 4
      MVCHW.md

+ 7 - 4
MVCHW.md

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