Il modello Data Mapper è una tecnica di progettazione utilizzata nello sviluppo del software, in particolare nelle applicazioni PHP, per separare la logica aziendale dalla persistenza dei dati. Questa separazione migliora la manutenbilità del codice, la testabilità e la scalabilità isolando come i dati vengono memorizzati e recuperati dalle regole aziendali fondamentali.

Capire il modello di Data Mapper

L'idea principale del modello Data Mapper è quella di utilizzare uno strato dedicato, chiamato Data Mapper, per trasferire i dati tra oggetti e un database senza che gli oggetti debbano conoscere i dettagli del database, in contrasto con il modello Active Record, dove gli oggetti stessi gestiscono le operazioni del database.

Vantaggi dell'utilizzo del modello Data Mapper

  • Decoupling:[] Separa la logica aziendale dal codice di accesso ai dati.
  • Testability:[] La logica aziendale può essere testata indipendentemente dal database.
  • Flessibilità:[] Le modifiche nello schema di database o nei metodi di archiviazione richiedono modifiche minime alla logica aziendale.
  • Maintainability:[] La separazione chiara delle preoccupazioni semplifica la gestione dei codici.

Implementare il Data Mapper in PHP

L'implementazione del modello Data Mapper comporta la creazione di tre componenti principali:

  • Oggetti domestici:[] Rappresentare le entità aziendali.
  • Data Mapper Classi:[] Gestisci il trasferimento dei dati tra oggetti e database.
  • Database Layer:[ La connessione e le query del database reali.

Esempio: Entità dell'utente

Supponiamo di avere una classe di Utente che rappresenta un utente nella nostra applicazione:

class User {
 public $id;
 public $name;
 public $email;

 public function __construct($id = null, $name = '', $email = '') {
 $this->id = $id;
 $this->name = $name;
 $this->email = $email;
 }
}

Creazione della classe di Data Mapper

Il Data Mapper per la classe User gestisce le interazioni del database:

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();
 }
 }
}

Conclusioni

L'implementazione del modello Data Mapper in PHP consente di creare un'architettura pulita decoupling business logic dalla memorizzazione dei dati. Questo approccio non solo rende il codice più manutenbile, ma facilita anche i test e le modifiche future, garantendo che la tua applicazione rimanga robusta e adattabile.