0 added
0 removed
Original
2026-01-01
Modified
2026-02-26
1
<p>Работать напрямую с PDO в коде не очень удобно из-за большого количества низкоуровневых деталей и повторяющегося шаблонного кода. Кроме того, нам постоянно приходится преобразовывать данные в одну и в другую сторону.</p>
1
<p>Работать напрямую с PDO в коде не очень удобно из-за большого количества низкоуровневых деталей и повторяющегося шаблонного кода. Кроме того, нам постоянно приходится преобразовывать данные в одну и в другую сторону.</p>
2
<p>Чтобы решить эту проблему, можно скрыть работу с базой за какой-то абстракцией. Один из вариантов такой изоляции называют<strong>DAO</strong>(<em>Data Access Object</em>).</p>
2
<p>Чтобы решить эту проблему, можно скрыть работу с базой за какой-то абстракцией. Один из вариантов такой изоляции называют<strong>DAO</strong>(<em>Data Access Object</em>).</p>
3
<p>Концепция DAO очень проста. Она сводится к созданию класса под каждую таблицу в базе данных. В классе реализуются методы, которые сохраняют, удаляют или ищут сущности в этой таблице. Когда речь идет о пользователях, наш класс DAO может выглядеть так:</p>
3
<p>Концепция DAO очень проста. Она сводится к созданию класса под каждую таблицу в базе данных. В классе реализуются методы, которые сохраняют, удаляют или ищут сущности в этой таблице. Когда речь идет о пользователях, наш класс DAO может выглядеть так:</p>
4
<p>Метод save() в этом классе не только сохраняет данные в базу, но и изменяет переданный объект, устанавливая внутри него идентификатор. Зачем это нужно? Код приложения работает с объектом, а не с базой напрямую. Соответственно, любые изменения в базе должны отражаться на объекте.</p>
4
<p>Метод save() в этом классе не только сохраняет данные в базу, но и изменяет переданный объект, устанавливая внутри него идентификатор. Зачем это нужно? Код приложения работает с объектом, а не с базой напрямую. Соответственно, любые изменения в базе должны отражаться на объекте.</p>
5
<p>Если бы мы не установили идентификатор после сохранения пользователя, то не смогли бы:</p>
5
<p>Если бы мы не установили идентификатор после сохранения пользователя, то не смогли бы:</p>
6
<ul><li>Формировать ссылки - например, ссылку на редактирование пользователя</li>
6
<ul><li>Формировать ссылки - например, ссылку на редактирование пользователя</li>
7
<li>Сравнивать объекты друг с другом</li>
7
<li>Сравнивать объекты друг с другом</li>
8
<li>Отличать существующих пользователей от новых, которых мы еще не сохранили в базу данных</li>
8
<li>Отличать существующих пользователей от новых, которых мы еще не сохранили в базу данных</li>
9
<li>Обеспечить работу кода так, чтобы полноценная версия save() проверяла наличие идентификатора и выполняла обновление данных, если его нет</li>
9
<li>Обеспечить работу кода так, чтобы полноценная версия save() проверяла наличие идентификатора и выполняла обновление данных, если его нет</li>
10
</ul><p>Рассмотрим несколько примеров использования DAO:</p>
10
</ul><p>Рассмотрим несколько примеров использования DAO:</p>
11
11