Danyloff

Шаблон Table Data Gateway с примерами на PHP


  • ·

· ·

Table Data Gateway — это паттерн проектирования, который используется для управления доступом к данным в базе данных. Он представляет собой объект, который обеспечивает доступ к таблице в базе данных и предоставляет методы для выполнения операций CRUD (Create, Read, Update, Delete) над данными.

Основная идея Table Data Gateway заключается в том, что каждая таблица в базе данных имеет свой собственный объект-шлюз, который отвечает за доступ к данным этой таблицы. Это позволяет разделить логику работы с базой данных на отдельные объекты и упростить ее поддержку и расширение.

Пример реализации Table Data Gateway на PHP

class UserGateway {
    private $db;

    public function __construct(PDO $db) {
        $this->db = $db;
    }

    public function findById($id) {
        $stmt = $this->db->prepare('SELECT * FROM users WHERE id = :id');
        $stmt->execute(['id' => $id]);
        return $stmt->fetch(PDO::FETCH_ASSOC);
    }

    public function findAll() {
        $stmt = $this->db->prepare('SELECT * FROM users');
        $stmt->execute();
        return $stmt->fetchAll(PDO::FETCH_ASSOC);
    }

    public function insert(array $data) {
        $stmt = $this->db->prepare('INSERT INTO users (name, email) VALUES (:name, :email)');
        $stmt->execute(['name' => $data['name'], 'email' => $data['email']]);
        return $this->db->lastInsertId();
    }

    public function update($id, array $data) {
        $stmt = $this->db->prepare('UPDATE users SET name = :name, email = :email WHERE id = :id');
        $stmt->execute(['id' => $id, 'name' => $data['name'], 'email' => $data['email']]);
        return $stmt->rowCount();
    }

    public function delete($id) {
        $stmt = $this->db->prepare('DELETE FROM users WHERE id = :id');
        $stmt->execute(['id' => $id]);
        return $stmt->rowCount();
    }
}

В этом примере мы создали класс UserGateway, который представляет собой шлюз для таблицы users в базе данных. Конструктор класса принимает объект PDO, который используется для выполнения запросов к базе данных.

Метод findById() выполняет запрос к базе данных для поиска пользователя по его идентификатору. Метод findAll() возвращает все записи из таблицы users. Метод insert() добавляет новую запись в таблицу users и возвращает идентификатор новой записи. Метод update() обновляет запись в таблице users по ее идентификатору. Метод delete() удаляет запись из таблицы users по ее идентификатору.

Пример использования класса UserGateway

$db = new PDO('mysql:host=localhost;dbname=test', 'username', 'password');
$userGateway = new UserGateway($db);

$user = $userGateway->findById(1);
echo $user['name'] . ' ' . $user['email'] . "n";

$users = $userGateway->findAll();
foreach ($users as $user) {
    echo $user['name'] . ' ' . $user['email'] . "n";
}

$id = $userGateway->insert(['name' => 'John Doe', 'email' => '[email protected]']);
echo 'New user id: ' . $id . "n";

$userGateway->update($id, ['name' => 'Jane Doe', 'email' => '[email protected]']);

$userGateway->delete($id);

В этом примере мы создали объект PDO для подключения к базе данных и передали его в конструктор класса UserGateway. Затем мы использовали методы класса UserGateway для выполнения операций CRUD над данными в таблице users.

Заключение

Table Data Gateway — это простой и эффективный паттерн проектирования для работы с базами данных. Он позволяет разделить логику работы с базой данных на отдельные объекты и упростить ее поддержку и расширение.


Так же интересно

Аннотации в PHP

Аннотации в PHP - это специальные комментарии, которые позволяют добавлять метаданные к классам, методам, свойствам и другим элементам кода. Они используются...

Инкапсуляция в PHP

Инкапсуляция - это один из основных принципов объектно-ориентированного программирования (ООП), который позволяет скрыть внутреннюю реализацию объекта от...