Engenharia Estrutural Civil &
Implementação do padrão de mapeamento de dados para dissociar a lógica de negócios da camada de persistência no PHP
Table of Contents
O padrão Data Mapper é uma técnica de design usada no desenvolvimento de software, particularmente em aplicações PHP, para separar a lógica de negócios da persistência de dados. Esta separação melhora a manutenção de código, a testabilidade e a escalabilidade isolando como os dados são armazenados e recuperados das regras de negócios principais.
Compreendendo o padrão de mapeamento de dados
A ideia central do padrão Data Mapper é usar uma camada dedicada – chamada Data Mapper – para transferir dados entre objetos e um banco de dados sem que os objetos precisem saber sobre os detalhes do banco de dados. Esta abordagem contrasta com o padrão Active Record, onde os objetos lidam com operações de banco de dados.
Benefícios de usar o padrão de mapeamento de dados
- Descoupling: Separa a lógica de negócios do código de acesso de dados.
- Testabilidade: A lógica de negócios pode ser testada independentemente da base de dados.
- Flexibilidade: As alterações no esquema de banco de dados ou nos métodos de armazenamento requerem modificações mínimas na lógica de negócios.
- Manutenção: A separação clara de preocupações simplifica a gestão de códigos.
Implementação do Data Mapper no PHP
A implementação do padrão Data Mapper envolve a criação de três componentes principais:
- Objectos principais: Representar as entidades empresariais.
- Data Mapper Classes: Lidar com a transferência de dados entre objetos e o banco de dados.
- Base de dados Camada: A conexão e consultas reais do banco de dados.
Exemplo: Entidade do Usuário
Suponha que tenhamos uma classe de usuário representando um usuário em nossa aplicação:
class User {
public $id;
public $name;
public $email;
public function __construct($id = null, $name = '', $email = '') {
$this->id = $id;
$this->name = $name;
$this->email = $email;
}
}
Criando a classe de mapeamento de dados
O Data Mapper para a classe Usuário gerencia interações de banco de dados:
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();
}
}
}
Conclusão
A implementação do padrão Data Mapper no PHP ajuda a criar uma arquitetura limpa, desacoplando a lógica de negócios do armazenamento de dados. Essa abordagem não só torna seu código mais mantendível, como também facilita testes e futuras modificações, garantindo que sua aplicação permaneça robusta e adaptável.