Accueil » Tous les articles » PHP » [PHP]Injection de dépendances en lecture seule

[PHP]Injection de dépendances en lecture seule

protected readonly MyMagicClass $magicClass;

public function __construct(MyMagicClass $magicClass)
{
  $this->magicClass = $magicClass; //à partir de là, la propriété $magicClass ne doit plus être modifié
}

Ou pour les gens qui aiment la simplification

public function __construct(protected readonly MyMagicClass $magicClass)
{
}

Pourquoi la lecture seule?

L’utilisation du mot-clé readonly offre plusieurs avantages lors de l’injection de dépendances. L’une des raisons principales est la sécurité. En déclarant une dépendance comme en lecture seule, vous signalez clairement que la classe dépendante ne doit pas altérer l’état interne de la classe injectée. Vous communiquez explicitement l’intention du code. Cela renforce la sécurité du code en réduisant les risques de modifications accidentelles. Par ailleurs, cela ajoute de la clarté aux interactions entre les classes injectée et dépendante.

Il faut s’assurer que l’objet injecté ne doit pas être modifié par la classe dépendante. Si c’est le cas, une relecture du code peut éventuellement révéler une mauvaise utilisation de l’injection de dépendances. Cette approche améliore normalement la lisibilité du code et simplifie la compréhension de la logique sous-jacente.

Si la classe injectée est conçue pour être immuable, la déclaration en lecture seule contribue à garantir cette immutabilité. Cette garantie peut être cruciale pour des raisons de sécurité et de cohérence du programme. En signalant clairement que la classe injectée ne doit pas être modifiée, vous renforcez la fiabilité de votre système et indiquez aux autres développeurs (dont vous dans quelques mois) que cette classe n’est pas destinée à être modifiée.

Quel bénéfices réels ?

En terme de performances, l’accès à la valeur d’une propriété en lecture seule se fait avec une efficacité comparable à celui d’une propriété normale. Une fois que la valeur a été définie, l’accès à cette valeur ne nécessite pas de traitement supplémentaire particulier pour une propriété en lecture seule par rapport à une propriété normale.

En revanche, les propriétés avec accesseurs, même celles qui utilisent un stockage implicite (c’est-à-dire celles qui ne nécessitent pas l’écriture explicite de méthodes get et set), peuvent entrainer une pénalité de performance par rapport aux propriétés en lecture seule. Les accesseurs, même s’ils sont implicitement stockés, peuvent introduire une surcharge en termes de traitement lors de l’accès à la propriété.

Donc, si vous devez traiter une pile de 100 000 exécutions, cela peut avoir une influence. Par exemple pour un import de données. Dans le cas contraire, l’utilisation de la lecture seule ne sera qu’une bonne pratique.

Conclusion

En résumé, l’utilisation de propriétés en lecture seule lors de l’injection de dépendances contribue à maximiser la sécurité, la clarté et la garantie d’immutabilité dans votre code. Cependant, il faut garder à l’esprit que chaque décision doit être prise en fonction des besoins spécifiques de votre application.

Les gains en terme de performance sont suffisamment faibles pour être ignorés dans la plupart des cas.

Besoin d’aide pour mettre cela en place ?


Publié

dans

,

par

Commentaires

Laisser un commentaire