Try using it in your preferred language.

English

  • English
  • 汉语
  • Español
  • Bahasa Indonesia
  • Português
  • Русский
  • 日本語
  • 한국어
  • Deutsch
  • Français
  • Italiano
  • Türkçe
  • Tiếng Việt
  • ไทย
  • Polski
  • Nederlands
  • हिन्दी
  • Magyar
translation

Ceci est un post traduit par IA.

제이온

[Effective Java] Item 5. Utilisez l'injection de dépendances au lieu de spécifier les ressources

Choisir la langue

  • Français
  • English
  • 汉语
  • Español
  • Bahasa Indonesia
  • Português
  • Русский
  • 日本語
  • 한국어
  • Deutsch
  • Italiano
  • Türkçe
  • Tiếng Việt
  • ไทย
  • Polski
  • Nederlands
  • हिन्दी
  • Magyar

Texte résumé par l'IA durumis

  • Si une classe dépend intérieurement d'une ou plusieurs ressources, il est préférable d'éviter d'utiliser les classes utilitaires statiques et les classes singletons, et d'utiliser plutôt l'injection de dépendances.
  • L'utilisation de l'injection de dépendances peut améliorer la flexibilité, la réutilisabilité et la testabilité de la classe, et les ressources peuvent être injectées via le constructeur, l'usine statique, le générateur, etc.
  • L'injection de dépendances peut être utilisée en passant la ressource elle-même ou l'usine de ressources, et dans les projets à forte dépendance, il est efficace d'utiliser un framework d'injection de dépendances.

Si une classe dépend en interne d'une ou de plusieurs ressources, et que ces ressources affectent le fonctionnement de la classe, il est préférable de ne pas utiliser de singletons ni de classes utilitaires statiques.


Ces ressources ne doivent pas être créées directement par la classe, mais plutôt en les passant au constructeur. L'injection de dépendances permet d'améliorer la flexibilité, la réutilisabilité et la testabilité de la classe.


Exemple

Exemple d'utilisation d'une classe utilitaire statique

public class SpellChecker {

    private static final Lexicon dictionary = new Lexicon();

    private SpellChecker() {
    }

    public static boolean isValid(String word) {
        // Logique utilisant le dictionnaire
    }

    public static List suggestions(String typo) {
        // Logique utilisant le dictionnaire
    }

Cette classe utilitaire suppose qu'un seul dictionnaire est utilisé. Mais dans la réalité, il existe souvent des dictionnaires séparés par langue, et même des dictionnaires distincts pour les termes spécialisés.


Exemple d'utilisation d'une classe singleton

public class SpellChecker {

    private final Lexicon dictionary = new Lexicon();

    public static SpellChecker INSTANCE = new SpellChecker();

    private SpellChecker() {
    }

    public static boolean isValid(String word) {
        // Logique utilisant le dictionnaire
    }

    public static List suggestions(String typo) {
        // Logique utilisant le dictionnaire
    }


De même, une classe singleton suppose qu'un seul dictionnaire est utilisé, ce qui présente le même inconvénient que ci-dessus.


Solution 1 - Supprimer le mot-clé final du champ

public class SpellChecker {

    private Lexicon dictionary = new Lexicon();

    public static SpellChecker INSTANCE = new SpellChecker();

    private SpellChecker() {
    }

    public static void changeDictionary(Lexicon dictionary) {
        this.dictionary = dictionary;
    }

    public static boolean isValid(String word) {
        // Logique utilisant le dictionnaire
    }

    public static List suggestions(String typo) {
        // Logique utilisant le dictionnaire
    }


Il est également possible de supprimer le mot-clé final du dictionnaire d'une classe utilitaire statique ou d'une classe singleton et de le remplacer par un autre dictionnaire à partir de l'extérieur. Cependant, cette approche est difficile à utiliser et peut poser des problèmes de concurrence dans un environnement multithreadé.


Solution 2 - Utiliser l'injection de dépendances

public class SpellChecker {

    private final Lexicon dictionary;

    public SpellChecker(Lexicon dictionary) {
        this.dictionary = dictionary;
    }

    public static boolean isValid(String word) {
        // Logique utilisant le dictionnaire
    }

    public static List suggestions(String typo) {
        // Logique utilisant le dictionnaire
    }


L'exemple ci-dessus montre que les classes statiques et les classes singleton ne doivent pas dépendre de ressources internes. En d'autres termes, les ressources internes doivent être injectées de l'extérieur.


Une classe utilisant l'injection de dépendances a l'avantage d'être immuable grâce au mot-clé final et de prendre en charge plusieurs instances de ressources. En outre, l'injection de dépendances peut être appliquée non seulement aux constructeurs, mais aussi aux méthodes d'usine statiques et aux constructeurs.


L'injection de dépendances consiste simplement à transmettre la ressource elle-même, mais il est souvent utilisé de transmettre une usine de ressources. Une usine est un objet qui crée à la demande des instances d'un type spécifique. Cette approche est appelée modèle de méthode d'usine et Supplier en Java 8 est un exemple parfait d'une usine.


public static List create(Supplier generator) {
    ...


Les génériques sont généralement utilisés pour limiter les paramètres de type de l'usine. Avec cette approche, le client peut transmettre n'importe quelle fabrique qui est un sous-type du type qu'il a spécifié.


L'injection de dépendances améliore la flexibilité et la testabilité, mais peut entraîner des coûts importants pour les projets ayant beaucoup de dépendances. Dans ce cas, vous pouvez utiliser un framework d'injection de dépendances (comme Dagger, Guice, Spring, etc.) pour réduire ces coûts.


Source

제이온
제이온
제이온
제이온
[Efficace Java] Item 1. Envisager des méthodes d'usine statiques à la place des constructeurs Les méthodes d'usine statiques sont un moyen flexible et efficace de créer des instances à la place des constructeurs. Elles peuvent avoir un nom, renvoyer des instances répondant à des conditions spécifiques et améliorer les performances grâce à la mise

27 avril 2024

[Effective Java] Item 3. Garantir un singleton avec un constructeur privé ou un type énuméré Cet article présente trois méthodes pour implémenter le modèle de conception singleton en Java (membre public statique, méthode d'usine statique, type énuméré) et explique les avantages et les inconvénients de chaque méthode, ainsi que les précautions à p

27 avril 2024

[Effective Java] Item 4 : Utilisez un constructeur privé pour empêcher l'instanciation Pour les classes utilitaires qui ne contiennent que des méthodes et des champs statiques, il est préférable de définir l'accès du constructeur sur privé pour empêcher l'instanciation. Cela permet d'éviter que les utilisateurs ne confondent le constructeur

28 avril 2024

Moquer le client Prisma pour les tests unitaires dans NestJS Lors des tests unitaires d'une application, il est important de supprimer les dépendances externes. Vous pouvez facilement effectuer des tests unitaires en utilisant la méthode de moquerie de Jest pour Prisma ORM. En installant le package jest-mock-extend
제이의 블로그
제이의 블로그
제이의 블로그
제이의 블로그

2 avril 2024

[Développeur non spécialisé, survivre en tant que développeur] 16. Conseils pour créer un portfolio de développeur junior Un développeur junior (en particulier un non-spécialiste) doit clairement expliquer les services ou les fonctionnalités qu'il a développés lors de la création d'un portfolio, en plus de ses compétences techniques. Par exemple, si le projet est une « commu
투잡뛰는 개발 노동자
투잡뛰는 개발 노동자
투잡뛰는 개발 노동자
투잡뛰는 개발 노동자

3 avril 2024

Comment Rust empêche les bogues de concurrence Rust est un langage puissant qui résout les défis de la programmation concurrente. Son système de types et son modèle de propriété garantissent la sécurité du transfert et du partage de données entre les threads. Les modèles de mutabilité interne, tels qu
곽경직
곽경직
곽경직
곽경직
곽경직

28 mars 2024

[Histoire d'un développeur SI] 03. Préparation de l'entretien d'embauche dans une entreprise SI L'entretien d'embauche pour les développeurs SI met davantage l'accent sur la capacité de codage que sur les compétences techniques élevées. Ainsi, la compréhension de la structure Spring + mybatis apprise dans les écoles de formation subventionnées par l
투잡뛰는 개발 노동자
투잡뛰는 개발 노동자
투잡뛰는 개발 노동자
투잡뛰는 개발 노동자
투잡뛰는 개발 노동자

16 avril 2024

Modélisation de données conceptuelle La modélisation de données conceptuelle est le processus de séparation des entités et de représentation de leurs relations sous forme de diagramme ERD. Une entité est une unité d'information indépendante et un attribut est une donnée possédée par une enti
제이의 블로그
제이의 블로그
제이의 블로그
제이의 블로그

8 avril 2024

Créer une CLI élégante avec Rust Cet article explique comment implémenter une application CLI en Rust. Nous utiliserons les bibliothèques clap et ratatui pour créer un programme CLI avec des fonctionnalités de connexion et de déconnexion. Nous présentons les aspects clés du développement
곽경직
곽경직
곽경직
곽경직
곽경직

13 mars 2024