Civil &: строительная инженерия
Внедрение шаблона Data Mapper для удешевления бизнес-логики из уровня устойчивости в PHP
Table of Contents
Паттерн Data Mapper — это метод проектирования, используемый в разработке программного обеспечения, особенно в приложениях PHP, для отделения бизнес-логики от устойчивости данных. Это разделение улучшает управляемость кода, проверяемость и масштабируемость, изолируя то, как данные хранятся и извлекаются из основных бизнес-правил.
Понимание шаблона Data Mapper
Основная идея шаблона Data Mapper заключается в использовании выделенного слоя, называемого Data Mapper, для передачи данных между объектами и базой данных без объектов, нуждающихся в знаниях о деталях базы данных. Этот подход контрастирует с шаблоном Active Record, где сами объекты обрабатывают операции с базами данных.
Преимущества использования шаблона Data Mapper
- Разъединение: Отделяет бизнес-логику от кода доступа к данным.
- Проверяемость: Бизнес-логика может быть протестирована независимо от базы данных.
- Гибкость: Изменения в схеме базы данных или методах хранения требуют минимальных изменений в бизнес-логике.
- Устойчивость: Четкое разделение проблем упрощает управление кодом.
Внедрение Data Mapper в PHP
Внедрение шаблона Data Mapper включает в себя создание трех основных компонентов:
- Объекты домена: Представляют субъекты предпринимательской деятельности.
- Классы отображения данных: Обработка передачи данных между объектами и базой данных.
- Слой базы данных: Фактическое подключение к базе данных и запросы.
Пример: Пользовательская организация
Предположим, что у нас есть класс пользователей, представляющий пользователя в нашем приложении:
class User {
public $id;
public $name;
public $email;
public function __construct($id = null, $name = '', $email = '') {
$this->id = $id;
$this->name = $name;
$this->email = $email;
}
}
Создание класса Data Mapper
Data Mapper для класса User управляет взаимодействием с базами данных:
class UserMapper {
protected $pdo;
public function __construct(PDO $pdo) {
$this->pdo = $pdo;
}
public function findById($id) {
$stmt = $this->pdo->prepare('SELECT * FROM users WHERE id = :id');
$stmt->execute([':id' => $id]);
$row = $stmt->fetch();
if ($row) {
return new User($row['id'], $row['name'], $row['email']);
}
return null;
}
public function save(User $user) {
if ($user->id) {
$stmt = $this->pdo->prepare('UPDATE users SET name = :name, email = :email WHERE id = :id');
$stmt->execute([
':name' => $user->name,
':email' => $user->email,
':id' => $user->id
]);
} else {
$stmt = $this->pdo->prepare('INSERT INTO users (name, email) VALUES (:name, :email)');
$stmt->execute([
':name' => $user->name,
':email' => $user->email
]);
$user->id = $this->pdo->lastInsertId();
}
}
}
Заключение
Внедрение шаблона Data Mapper в PHP помогает создать чистую архитектуру, отделяя бизнес-логику от хранения данных. Этот подход не только делает ваш код более удобным для обслуживания, но также облегчает тестирование и будущие модификации, гарантируя, что ваше приложение остается надежным и адаптируемым.