responsabilité unique

Le Single Responsabilite est l’un des 5 principes SOLID fondamentales.

Bien qu'étant la regle la plus connue de SOLID, elle souffre malheureusement d'une traduction littérale erronée.

Non, le Single Responsabilite ne signifie pas qu’une class ne doit faire qu’une seule chose.

La véritable traduction de ce principe est la suivante : “une class ne doit avoir qu’une seule raison de changer”

Bien que sémantiquement proche, il existe une véritable nuance

Considérons la class suivante :

(new LaserPrinter())->print($document);

Nous pourrions pensez que la seule responsabilité de cette class LaserPrinter est d’imprimer des documents ?

Pour autant, cette class LaserPrinter doit également gérer le format ainsi que la destination du document à imprimer :

class LaserPrinter
{	
    public function toPrint($document): Print
    {
        $format = $this->format();
        
        return $this->output($document, $format);
    }
    
    // [...]
}

Ces differents besoins sont des responsabilités à part entière qu’il est nécessaire d’isoler pour respecter le principe de responsabilités uniques.

Actullement, cette class possede plusieurs raisons de changer

class LaserPrinter
{
		public function __construct(
        protected Output $output,
        protected Format $format,
    ) {}
	
    public function toPrint($document): Print
		{
        return $this->output->print(
             document: $document,
             format: $this->format,
        );
		}
}

désormais, notre class possede une seule responsabilité et ses differentes preaucupations sont encapsulé dans des class.

Pour respecter le principe de RS il est necessaire d’analyser vos class sous un angle technique et non fonctionnel