Шаблон Data Mapper с примерами на PHP
- ·
-
Шаблон Data Mapper — это один из наиболее распространенных шаблонов проектирования, который используется для разделения бизнес-логики и работы с данными. Этот шаблон позволяет создавать объекты, которые могут работать с данными из различных источников, таких как базы данных, файлы или веб-сервисы. В этой статье мы рассмотрим, как использовать шаблон Data Mapper в PHP на примере книги Мартина Фаулера «Шаблоны корпоративных приложений».
Что такое Data Mapper?
Data Mapper — это шаблон проектирования, который используется для разделения бизнес-логики и работы с данными. Он позволяет создавать объекты, которые могут работать с данными из различных источников, таких как базы данных, файлы или веб-сервисы. Data Mapper позволяет создавать объекты, которые могут работать с данными из различных источников, таких как базы данных, файлы или веб-сервисы.
Data Mapper разделяет бизнес-логику и работу с данными на две отдельные области ответственности. Бизнес-логика описывает, как работает приложение, а работа с данными описывает, как данные хранятся и извлекаются. Data Mapper позволяет создавать объекты, которые могут работать с данными из различных источников, таких как базы данных, файлы или веб-сервисы.
Пример использования Data Mapper в PHP
Для примера мы создадим простое приложение для управления пользователями. Наше приложение будет иметь следующие функции:
- Добавление нового пользователя
- Редактирование существующего пользователя
- Удаление пользователя
- Получение списка всех пользователей
Для начала создадим класс User, который будет представлять пользователя
class User
{
private $id;
private $name;
private $email;
public function __construct($id, $name, $email)
{
$this->id = $id;
$this->name = $name;
$this->email = $email;
}
public function getId()
{
return $this->id;
}
public function getName()
{
return $this->name;
}
public function getEmail()
{
return $this->email;
}
}
Затем создадим интерфейс UserRepository, который будет определять методы для работы с пользователями
interface UserRepository
{
public function save(User $user);
public function update(User $user);
public function delete(User $user);
public function getById($id);
public function getAll();
}
Теперь создадим класс UserMapper, который будет реализовывать интерфейс UserRepository и работать с базой данных
class UserMapper implements UserRepository
{
private $db;
public function __construct(PDO $db)
{
$this->db = $db;
}
public function save(User $user)
{
$stmt = $this->db->prepare("INSERT INTO users (name, email) VALUES (:name, :email)");
$stmt->bindParam(':name', $user->getName());
$stmt->bindParam(':email', $user->getEmail());
$stmt->execute();
$user->setId($this->db->lastInsertId());
}
public function update(User $user)
{
$stmt = $this->db->prepare("UPDATE users SET name = :name, email = :email WHERE id = :id");
$stmt->bindParam(':name', $user->getName());
$stmt->bindParam(':email', $user->getEmail());
$stmt->bindParam(':id', $user->getId());
$stmt->execute();
}
public function delete(User $user)
{
$stmt = $this->db->prepare("DELETE FROM users WHERE id = :id");
$stmt->bindParam(':id', $user->getId());
$stmt->execute();
}
public function getById($id)
{
$stmt = $this->db->prepare("SELECT * FROM users WHERE id = :id");
$stmt->bindParam(':id', $id);
$stmt->execute();
$row = $stmt->fetch(PDO::FETCH_ASSOC);
if ($row) {
return new User($row['id'], $row['name'], $row['email']);
} else {
return null;
}
}
public function getAll()
{
$stmt = $this->db->prepare("SELECT * FROM users");
$stmt->execute();
$users = array();
while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
$users[] = new User($row['id'], $row['name'], $row['email']);
}
return $users;
}
}
В этом примере мы использовали PDO для работы с базой данных. Класс UserMapper реализует интерфейс UserRepository и определяет методы для работы с пользователями. Метод save() добавляет нового пользователя в базу данных, метод update() обновляет существующего пользователя, метод delete() удаляет пользователя, метод getById() получает пользователя по его идентификатору, а метод getAll() получает список всех пользователей.
Теперь мы можем использовать класс UserMapper для работы с пользователями в нашем приложении
$db = new PDO('mysql:host=localhost;dbname=test', 'username', 'password');
$userMapper = new UserMapper($db);
// Добавление нового пользователя
$user = new User(null, 'John Doe', '[email protected]');
$userMapper->save($user);
// Редактирование существующего пользователя
$user = $userMapper->getById(1);
$user->setName('Jane Doe');
$userMapper->update($user);
// Удаление пользователя
$user = $userMapper->getById(1);
$userMapper->delete($user);
// Получение списка всех пользователей
$users = $userMapper->getAll();
foreach ($users as $user) {
echo $user->getName() . "\n";
}
В этом примере мы создали объект UserMapper, который работает с базой данных, и использовали его для добавления, редактирования, удаления и получения пользователей.
Заключение
Шаблон Data Mapper — это мощный инструмент для разделения бизнес-логики и работы с данными. Он позволяет создавать объекты, которые могут работать с данными из различных источников, таких как базы данных, файлы или веб-сервисы. В этой статье мы рассмотрели, как использовать шаблон Data Mapper в PHP на примере книги Мартина Фаулера «Шаблоны корпоративных приложений». Мы создали класс User, интерфейс UserRepository и класс UserMapper, который реализует интерфейс UserRepository и работает с базой данных. Мы также показали, как использовать класс UserMapper для работы с пользователями в нашем приложении.