Шаблон Identity Map с примерами на PHP
- ·
-
Шаблон Identity Map — это паттерн проектирования, который используется для управления объектами в памяти приложения. Он позволяет избежать повторного создания объектов, которые уже существуют в памяти, и обеспечивает единообразный доступ к этим объектам.
Пример использования шаблона Identity Map на PHP
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;
}
}
class UserMapper {
private $db;
private $identityMap;
public function __construct($db) {
$this->db = $db;
$this->identityMap = array();
}
public function findById($id) {
if (isset($this->identityMap[$id])) {
return $this->identityMap[$id];
}
$stmt = $this->db->prepare('SELECT * FROM users WHERE id = ?');
$stmt->execute(array($id));
$row = $stmt->fetch();
if (!$row) {
return null;
}
$user = new User($row['id'], $row['name'], $row['email']);
$this->identityMap[$id] = $user;
return $user;
}
}
В этом примере класс User представляет собой объект, который мы хотим сохранить в памяти приложения. Класс UserMapper отвечает за получение данных из базы данных и создание объектов User. Он также содержит identityMap, которая хранит уже созданные объекты User.
Метод findById класса UserMapper получает идентификатор пользователя и проверяет, есть ли уже объект User с таким идентификатором в identityMap. Если объект уже существует, метод возвращает его. Если объект не существует, метод получает данные из базы данных, создает новый объект User и добавляет его в identityMap.
Использование шаблона Identity Map позволяет избежать повторного создания объектов и обеспечивает единообразный доступ к этим объектам. Это может улучшить производительность приложения и упростить управление объектами в памяти.
Заключение
Шаблон Identity Map — это полезный паттерн проектирования, который может быть использован для управления объектами в памяти приложения. Он позволяет избежать повторного создания объектов и обеспечивает единообразный доступ к этим объектам. Пример на PHP показывает, как можно использовать этот шаблон для управления объектами User.