Single Responsibility
Une classe doit faire une seule tâche
class FlightBooking {
public function book() {
// Logique de réservation de vol
}
}
class BookingEmailNotifier {
public function sendConfirmationEmail() {
// Logique d'envoi d'email de confirmation
}
}
Open/Closed
On doit toujours favoriser l’extension du code à sa modification : on ne modifie pas le fonctionnement suivant l’entité à utiliser, on définit une fonction commune.
interface Plane {
public function fly();
}
class A380 implements Plane {
public function fly() {...}
}
class B737Max implements Plane {
public function fly() {...}
}
class Airport {
public function takeoff(Plane $plane) {
$plane->fly();
}
}
Liskov Substitution
Les classes enfants doivent toujours respecter les attributs de la classe parent qu’il remplace (type de retour, arguments (type et nom), exceptions). On doit pouvoir remplacer la classe parent par celle enfant sans casser la compatibilité du programme
class Transport {
public function book(): Ticket {
// Logique de réservation de transport
}
}
class AirTransport extends Transport {
public function book(): Ticket {
// Logique spécifique de réservation de transport aérien
}
}
Interface Segregation
Il vaut mieux faire plusieurs petite interface, qu’une seule grosse. On pourra séparer les implémentations et ainsi respecter le principe de Single Responsibility.
interface Booking {
public function book();
}
interface Cancellation {
public function cancel();
}
Dependency Inversion
Les classes de bas niveaux (Domaine) ne doivent pas dépendre à des classes de hauts niveaux (MySQL, Controllers HTTP, Console, …)
class FlightBooking {
public function __construct(
private readonly PaymentGateway $paymentGateway
) {
}
public function book($amount) {
$this->paymentGateway->process($amount);
}
}