DAO - Data Access Object
Le DAO (Data Access Object) est un modèle de conception qui offre une manière d’isoler la logique métier de l’accès aux données dans une application.
Le DAO facilite un accès direct aux données, généralement à une source de données spécifique telle qu’une base de données ou un fichier. Il encapsule les détails d’accès aux données et fournit des méthodes CRUD (Create, Read, Update, Delete) pour interagir avec cette source de données.
class UserDAO {
private $db;
public function __construct(PDO $db) {
$this->db = $db;
}
public function getUserById(int $id) {
$stmt = $this->db->prepare("SELECT * FROM users WHERE id = :id");
$stmt->execute(['id' => $id]);
return $stmt->fetch(PDO::FETCH_ASSOC);
}
public function updateUserStatus(int $id, string $status) {
$stmt = $this->db->prepare("UPDATE users SET status = :status WHERE id = :id");
return $stmt->execute(['id' => $id, 'status' => $status]);
}
}
Quelle est la différence entre le DAO et le Repository ?
Le DAO se concentre principalement sur l’accès aux données brutes, tandis que le Repository ajoute une couche supplémentaire de logique métier et fournit une interface plus abstraite pour interagir avec les données. En d’autres termes, le Repository agit comme un intermédiaire entre la logique métier et les opérations de données, offrant une manière plus orientée objet de manipuler les données.
En pratique, le Repository peut utiliser le DAO pour implémenter ses fonctionnalités. Par exemple, un Repository peut utiliser un DAO pour récupérer des données brutes, puis appliquer une logique métier supplémentaire avant de renvoyer les données à l’application.
class UserRepository {
private $userDAO;
public function __construct(UserDAO $userDAO) {
$this->userDAO = $userDAO;
}
public function getUserById(int $id) {
return $this->userDAO->getUserById($id);
}
public function activateUserAccount(int $id) {
return $this->userDAO->updateUserStatus($id, 'active');
}
public function deactivateUserAccount(int $id) {
return $this->userDAO->updateUserStatus($id, 'inactive');
}
}
Aucune page ou chapitre n'a été ajouté à cet article.