47 votes

Que sont les objets d'aide en java ?

Je rencontre parfois des objets d'aide... Quelqu'un peut-il m'expliquer ce que sont ces objets d'aide et pourquoi nous en avons besoin ?

60voto

Bozho Points 273663

Certaines opérations communes à plusieurs classes peuvent être déplacées vers des classes d'aide, qui sont ensuite utilisées via la composition d'objets :

public class OrderService {
    private PriceHelper priceHelper = new PriceHelper();

    public double calculateOrderPrice(order) {
        double price = 0;
        for (Item item : order.getItems()) {
            double += priceHelper.calculatePrice(item.getProduct());
        }
    }
}

public class ProductService {
    private PriceHelper priceHelper = new PriceHelper();

    public double getProductPrice(Product product) {
        return priceHelper.calculatePrice(product);
    }
}

L'utilisation des classes d'aide peut se faire de plusieurs façons :

  • Les instancier directement (comme ci-dessus)
  • via l'injection de dépendances
  • en rendant leurs méthodes static et d'y accéder de manière statique, comme par exemple IOUtils.closeQuietly(inputStream) ferme une InputStream sans lancer d'exceptions.
  • au moins ma convention est de nommer les classes avec seulement des méthodes statiques et non des dépendances XUtils et des classes qui, à leur tour, ont des dépendances et doivent être gérées par un conteneur DI. XHelper

(L'exemple ci-dessus n'est qu'un exemple - il ne doit pas être discuté en termes de conception pilotée par le domaine).

13voto

Paul Wagland Points 10487

Il s'agit d'objets qui se trouvent "à côté" du corps principal du code et qui effectuent une partie du travail pour l'objet. Ils "aident" l'objet à faire son travail.

Par exemple, de nombreuses personnes ont un objet d'aide Closer. Cet objet prend divers objets pouvant être fermés, par exemple java.sql.Statement, java.sql.Connection, etc. et ferme l'objet en ignorant les erreurs qui en découlent. Cela s'explique par le fait que si vous obtenez une erreur lors de la fermeture d'un objet, il n'y a pas grand-chose que vous puissiez faire de toute façon, alors les gens l'ignorent tout simplement.

Plutôt que d'avoir ce texte passe-partout :

try {
  connection.close();
} catch (SQLException e) {
  // just ignore… what can you do when you can't close the connection?
   log.warn("couldn't close connection", e);
}

éparpillés dans le codebase, ils appellent simplement :

Closer.close(connection);

à la place. Par exemple, regardez la goyave procheQuietly .

1voto

Malaxeur Points 4277

Une méthode "d'aide" est généralement une méthode permettant de faire quelque chose plus facile peu importe ce que c'est. Parfois, ils sont utilisés pour rendre les choses plus lisibles/claires (certains peuvent le contester, mais c'est finalement très subjectif) :

public void doStuff() {
   wakeUp();
   drinkCoffee();
   drive();
   work();
   goHome();
}

Alors que chaque "méthode d'aide" est en soi assez complexe, le concept devient vraiment clair et simple.

Une autre très bonne utilisation des méthodes d'aide consiste à fournir une fonctionnalité commune à plusieurs classes différentes. Le meilleur exemple en est la méthode Math qui contient une tonne de méthodes d'aide statiques pour vous aider à calculer des choses comme le logarithme d'un nombre, l'exposant d'un nombre... etc.

La ligne de démarcation entre une méthode d'aide et une méthode normale est assez subjective, mais c'est l'essentiel. Les autres réponses sont également très bonnes.

1voto

firecharger65 Points 19
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Scanner;

public class Helpers {
public static String getDate() {
    SimpleDateFormat dateFormat = new SimpleDateFormat("dd-MM-yyyy");
        return dateFormat.format(new Date());
    }

    public static boolean isTimeABeforeTimeB(String timeA, String timeB) {
        try {
            SimpleDateFormat dateFormat = new SimpleDateFormat("dd-MM-yyyy hh:mm aa");
            Date dA = dateFormat.parse(timeA);
            Date dB = dateFormat.parse(timeB);
            if (dA.getTime() < dB.getTime()) {
                return true;
            } else {
                return false;
            }
        } catch (Exception e) {
            //
        }
        return false;
    }

    public static String getDateAndTimeInput(String prompt) {
        Scanner input = new Scanner(System.in);
        String ans;
        SimpleDateFormat dateFormat = new SimpleDateFormat("dd-MM-yyyy hh:mm aa");
        dateFormat.setLenient(false);
        boolean dateValid;
        do {
            System.out.print(prompt);
            ans = input.nextLine();
            ans = ans.trim();
            dateValid = true;
            try {
                Date d = dateFormat.parse(ans);
            } catch (Exception e) {
                dateValid = false;
            }
        } while (!dateValid);
        return ans;
    }

    public static String getStringInput(String prompt) {
        Scanner input = new Scanner(System.in);
        String ans;

        do {
            System.out.print(prompt);
            ans = input.nextLine();
            ans = ans.trim();
        } while (ans.length() == 0);
        return ans;
    }

    public static double getDoubleInput(String prompt) {
        Scanner input = new Scanner(System.in);
        double ans = 0;
        boolean inputValid;
        do {
            System.out.print(prompt);
            String s = input.nextLine();
            //Convert string input to integer
            try {
                ans = Double.parseDouble(s);
                inputValid = true;
            } catch (Exception e) {
                 inputValid = false;
            }
        } while (!inputValid);
        return ans;
    }

    public static int getIntegerInput(String prompt) {
        Scanner input = new Scanner(System.in);
        int ans = 0;
        boolean inputValid;
        do {
            System.out.print(prompt);
            String s = input.nextLine();
            // Convert string input to integer
            try {
                ans = Integer.parseInt(s);
                inputValid = true;
            } catch (Exception e) {
                inputValid = false;
            }
        } while (!inputValid);
        return ans;
    }

    public static int getIntegerInput(String prompt, int lowerBound, int upperBound) {
        Scanner input = new Scanner(System.in);
        int ans = 0;
        boolean inputValid;
        do {
            System.out.print(prompt);
            String s = input.nextLine();
            // Convert string input to integer
            try {
                ans = Integer.parseInt(s);
                if (ans >= lowerBound && ans <= upperBound) {
                    inputValid = true;
                } else {
                     inputValid = false;
                }
            } catch (Exception e) {
                inputValid = false;
            }
       } while (!inputValid);
       return ans;
   }
}

qui est un exemple de classe d'aide. Elle contient des méthodes qui sont utilisées par les autres classes du projet.

Par exemple, si quelqu'un veut entrer un nombre entier à partir d'une classe, il devra taper ceci : String num = Helpers.getIntegerInput("input your number") ;

L'invite est la sortie qui est montrée à l'utilisateur. D'autres exemples pour saisir une chaîne, un double, une date et une heure, etc.

0voto

Zachary Points 397

La classe Helper, à mon avis, est similaire aux fonctions normales déclarées en dehors des classes en C++. Par exemple, si vous avez besoin d'une constante globale pour plusieurs classes, vous pouvez définir une classe d'aide qui contient une variable statique finale.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X