fbpx

Unit of Work

Design Pattern “Unit of Work” no PHP

O design pattern “Unit of Work” é uma técnica utilizada para gerenciar transações em bancos de dados. Ele é muito útil em aplicações que precisam lidar com muitas operações de escrita no banco de dados, como inserções, atualizações e exclusões.

Como funciona o “Unit of Work”

O “Unit of Work” é uma classe que encapsula todas as operações de escrita no banco de dados em uma única transação. Ele mantém um registro de todas as entidades que foram modificadas durante a execução da aplicação e, ao final da transação, ele executa todas as operações de escrita de uma só vez.

Isso é muito útil porque evita que a aplicação faça várias transações no banco de dados, o que pode ser muito custoso em termos de performance. Além disso, ele garante que todas as operações de escrita sejam executadas com sucesso ou que nenhuma delas seja executada, caso ocorra algum erro.

Exemplo de código

Vamos supor que temos uma aplicação que precisa inserir um novo usuário no banco de dados e, em seguida, atualizar o seu perfil. Sem o “Unit of Work”, o código seria algo assim:

try {
    $pdo->beginTransaction();

    $stmt = $pdo->prepare("INSERT INTO users (name, email) VALUES (?, ?)");
    $stmt->execute([$name, $email]);

    $stmt = $pdo->prepare("UPDATE profiles SET bio = ? WHERE user_id = ?");
    $stmt->execute([$bio, $user_id]);

    $pdo->commit();
} catch (Exception $e) {
    $pdo->rollBack();
    throw $e;
}

Com o “Unit of Work”, o código ficaria assim:

$unitOfWork = new UnitOfWork($pdo);

$user = new User($name, $email);
$profile = new Profile($user_id, $bio);

$unitOfWork->registerNew($user);
$unitOfWork->registerDirty($profile);

$unitOfWork->commit();

Observe que, com o “Unit of Work”, não precisamos mais nos preocupar com as transações no banco de dados. Tudo é gerenciado automaticamente pela classe.

Boas práticas

Para utilizar o “Unit of Work” de forma eficiente, é importante seguir algumas boas práticas:

  • Utilize uma única instância do “Unit of Work” por requisição. Isso garante que todas as operações de escrita sejam executadas em uma única transação.
  • Registre todas as entidades que foram modificadas durante a execução da aplicação. Isso garante que todas as operações de escrita sejam executadas corretamente.
  • Utilize o padrão Repository para acessar o banco de dados. Isso garante que todas as operações de leitura sejam executadas de forma eficiente.

Conclusão

O “Unit of Work” é uma técnica muito útil para gerenciar transações em bancos de dados. Ele permite que a aplicação execute várias operações de escrita em uma única transação, o que pode melhorar significativamente a performance da aplicação. Além disso, ele garante que todas as operações de escrita sejam executadas com sucesso ou que nenhuma delas seja executada, caso ocorra algum erro.

Se você está desenvolvendo uma aplicação que precisa lidar com muitas operações de escrita no banco de dados, considere utilizar o “Unit of Work”. Ele pode ser a solução que você precisa para melhorar a performance da sua aplicação e garantir a integridade dos dados.

By ER Soluções Web