Danyloff

Шаблон Unit of Work с примерами на PHP


  • ·

· ·

Шаблон Unit of Work (единица работы) — это паттерн проектирования, который используется для управления транзакциями и изменениями в базе данных. Он позволяет группировать изменения в базе данных в единую транзакцию и обеспечивает целостность данных.

Создание единицы работы

Для создания единицы работы можно использовать класс, который будет отвечать за управление транзакциями и изменениями в базе данных.

class UnitOfWork {
    private $entityManager;
    private $entities = array();

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

    public function register($entity) {
        $this->entities[] = $entity;
    }

    public function commit() {
        $this->entityManager->beginTransaction();
        try {
            foreach ($this->entities as $entity) {
                $this->entityManager->persist($entity);
            }
            $this->entityManager->flush();
            $this->entityManager->commit();
        } catch (Exception $e) {
            $this->entityManager->rollback();
            throw $e;
        }
    }
}

Регистрация изменений

Для регистрации изменений можно использовать метод register, который добавляет измененные объекты в список изменений. 

$unitOfWork = new UnitOfWork($entityManager);

$user = $entityManager->find('User', 1);
$user->setName('John Doe');
$unitOfWork->register($user);

$address = $entityManager->find('Address', 1);
$address->setCity('New York');
$unitOfWork->register($address);

Фиксация изменений

Для фиксации изменений можно использовать метод commit, который сохраняет изменения в базе данных в рамках единой транзакции. 

$unitOfWork->commit();

Заключение

Шаблон Unit of Work позволяет управлять транзакциями и изменениями в базе данных. Он позволяет группировать изменения в единую транзакцию и обеспечивает целостность данных. В PHP этот шаблон может быть реализован с помощью класса, который будет отвечать за управление транзакциями и изменениями в базе данных, а также методов для регистрации изменений и фиксации изменений.


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