Sobes.tech
Junior — Middle

Pouvez-vous donner un exemple du patron de conception le plus complexe que vous avez appliqué en pratique?

sobes.tech IA

Réponse de l'IA

L'un des motifs de conception les plus complexes avec lesquels j'ai travaillé en PHP est le motif "État" (State). Ce motif permet à un objet de changer son comportement en fonction de son état interne, sans changer sa classe.

Exemple d'utilisation : j'avais un projet avec un système de commandes, où la commande pouvait être dans différents états (nouveau, payé, expédié, annulé). Au lieu d'utiliser de nombreux opérateurs conditionnels, j'ai implémenté chaque état comme une classe distincte qui implémente une interface commune, et j'ai changé dynamiquement l'état de la commande.

interface OrderState {
    public function proceed(OrderContext $order);
}

class NewOrderState implements OrderState {
    public function proceed(OrderContext $order) {
        // logique pour passer à l'état "payé"
        $order->setState(new PaidOrderState());
    }
}

class PaidOrderState implements OrderState {
    public function proceed(OrderContext $order) {
        // logique pour passer à l'état "expédié"
        $order->setState(new ShippedOrderState());
    }
}

class OrderContext {
    private $state;

    public function __construct(OrderState $state) {
        $this->state = $state;
    }

    public function setState(OrderState $state) {
        $this->state = $state;
    }

    public function proceed() {
        $this->state->proceed($this);
    }
}

// Utilisation
$order = new OrderContext(new NewOrderState());
$order->proceed(); // passe à PaidOrderState
$order->proceed(); // passe à ShippedOrderState

Ce motif est complexe car il nécessite une bonne compréhension des principes de la POO et une conception correcte des classes pour gérer les états, mais il améliore considérablement la lisibilité et l'extensibilité du code.