L'injection de dépendance (ID) est un modèle bien connu et à la mode. La plupart des ingénieurs connaissent ses avantages, tels que:
- Rendre l'isolement dans les tests unitaires possible / facile
- Définir explicitement les dépendances d'une classe
- Faciliter une bonne conception ( principe de responsabilité unique (SRP), par exemple)
- Activer rapidement les implémentations de commutation (
DbLogger
au lieu de,ConsoleLogger
par exemple)
Je pense qu’il existe un consensus général dans l’industrie selon lequel l’ID constitue un bon modèle utile. Il n'y a pas trop de critiques pour le moment. Les inconvénients mentionnés dans la communauté sont généralement mineurs. Certains d'entre eux:
- Augmentation du nombre de cours
- Création d'interfaces inutiles
Actuellement, nous discutons de la conception d'architecture avec mon collègue. Il est plutôt conservateur, mais ouvert d'esprit. Il aime poser des questions, ce que j'estime satisfaisant, car de nombreux informaticiens se contentent de copier la dernière tendance, de répéter les avantages et, en général, de ne pas trop réfléchir - n'analysez pas trop en profondeur.
Les choses que je voudrais demander sont:
- Devrions-nous utiliser l'injection de dépendance quand nous n'avons qu'une seule implémentation?
- Devrions-nous interdire la création de nouveaux objets, à l’exception des objets langage / framework?
- L'injection d'une seule implémentation est-elle une mauvaise idée (disons que nous n'avons qu'une seule implémentation, nous ne voulons donc pas créer d'interface "vide") si nous n'envisageons pas de tester à l'unité une classe particulière?
UserService
cette classe, c'est juste un détenteur de logique. Une connexion à la base de données est injectée et des tests sont exécutés dans une transaction annulée. Beaucoup qualifieraient cette mauvaise pratique, mais j’ai trouvé que cela fonctionnait extrêmement bien. Il n'est pas nécessaire de contourner votre code uniquement pour effectuer des tests et vous obtenez le bogue qui permet de trouver le pouvoir des tests d'intégration.