Controles des paramètres d'entrée

[Résolu/Fermé]
Signaler
Messages postés
9
Date d'inscription
dimanche 24 novembre 2013
Statut
Membre
Dernière intervention
9 juillet 2021
-
Messages postés
9
Date d'inscription
dimanche 24 novembre 2013
Statut
Membre
Dernière intervention
9 juillet 2021
-
Bonjour à tout le monde,

J'ai deux classes la première doit contrôler les données d'entrée et la seconde se charge de les renvoyer sur un serveur. Les données transitent entre les deux classes par des beans.

Voici ma première classe :

public class TransFormat {

public IdentificationRequestBean formatEntret(
ryType beneficiaryREQUEST)
throws WsBusinessErrorMsg, WsSystemErrorMsg {

IdentificationRequestBean idReq = new IdentificationRequestBean();

try {


/* Récupération du champ NIR */
if (beneficiaryREQUEST.getNni().substring(0, 13) != null
|| beneficiaryREQUEST.getNni().length() < 13) {
idReq.setNni(beneficiaryREQUEST.getNni());
} else
LogHelper.info(getClass(), meth,
"Le nir est absent/ou incomplet");

// Récupération du nom du partenaire
if (beneficiaryREQUEST.getNom() != null) {

idReq.setNom(beneficiaryREQUEST.getNom());
} else
LogHelper.info(getClass(), meth,
"Le nom de famille du partenaire est manquant");

// Récupération du prénom
if (beneficiaryREQUEST.getPrenom() != null)
idReq.setPrenom(beneficiaryREQUEST.getPrenom());
else
LogHelper.info(getClass(), meth,
"Le prenom du partenaire est manquant");
} catch (Exception ex) {
//Gestion des erreurs techniques
ex.printStacktrace();
}

return idReq;
}


La deuxième classe appelle un bean pour formater les données puis transférer celles-ci au serveur :




public Process FormatIdRequest (IdentificationRequestBean idRequest)
{

Payload payload = new Payload();
Process process = new Process();

LogHelper.info(getClass(), meth, "Récupération des données passées en paramètres");

//Récuperation du nir
payload.setNir(idRequest.getNni());


//Récupération du nom
payload.setNom(idRequest.getNom());

//Récupération du prenom
payload.setPrenom(idRequest.getPrenom());


process.setPayload(payload);

LogHelper.info(getClass(), meth, "Fin du formattage");

return process;

}


Ma quesion est la suivante : je n'arrive pas à implémenter les règles de gestion suivante :

1 - La donnée nir doit être renseignée

2 - Si nir absent, les données nom et prenom doient être renseignées.

Merci d'avance pour votre aide précieuse.
Cordialement,

1 réponse

Messages postés
16373
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
4 août 2021
2 861
Bonjour,

Je trouve la conception de tes deux classes un peu bizarre...

Je reprends pas à pas :

1)
public IdentificationRequestBean formatEntret(
		ryType beneficiaryREQUEST)
		throws WsBusinessErrorMsg, WsSystemErrorMsg {

Pourquoi est-ce que tu renverrais des WsBusinessErrorMsg ou WsSystemErrorMsg ici, ça n'a pas de sens, tu fais juste des getter et setter sur des beans, je ne vois pas où tu vas trouver des erreurs !

De plus grosses infractions aux conventions de nommage, que ce soit le type de données ryType, le paramètre beneficiaryREQUEST, ou pire, tes deux Throwable dont on ne sait même pas si ce sont des Exception ou des Error...

2)
/* Récupération du champ NIR */
if (beneficiaryREQUEST.getNni().substring(0, 13) != null
		|| beneficiaryREQUEST.getNni().length() < 13) {
	idReq.setNni(beneficiaryREQUEST.getNni());		
} else
	LogHelper.info(getClass(), meth,
			"Le nir est absent/ou incomplet");

Ici, tu fais des "calculs" complètement faux, d'une part tu ne vérifies pas que getNni peut valoir null, ensuite tu vérifies que le substring est différent de null (ce qui est impossible, cette méthode ne renvoie jamais null) mais tu ne vérifies pas avant de faire le substring que effectivement la taille de ce String est autorisée... Bref ça va planter facilement !
De plus l'utilisation du Logger est critiquable, le but de ta méthode est de te renvoyer un bean bien formé, or tu ne settes pas tous les champs, et si le champ est absent tu mets juste un avertissement au fin fond d'un fichier de log que personne ne lis jamais... Il faut être plus violent et envoyer une exception si le bean d'entrée est mal formé.

3)
} catch (Exception ex) {
    //Gestion des erreurs techniques
   ex.printStacktrace();
}

Pareil, d'une part il n'y a pas de raison d'avoir eu des erreurs techniques au préalable sur de la manipulation de bean, et même si tu en avais eu pourquoi ne pas utiliser ton Logger plutôt que de faire un printStackTrace ?

Quant à ta question, les deux conditions sont incompatibles
1 - La donnée nir doit être renseignée
2 - Si nir absent, les données nom et prenom doient être renseignées.


Il n'y a pas de raison de traiter le cas où nir est absent alors qu'il doit être renseigné... il faut faire un choix c'est l'un ou l'autre, ou alors il faut préciser le mode que tu souhaites avec un booléen en paramètre.

Exemple :

public IdentificationRequestBean format(RyType beneficiaryRequest, boolean nniRequired) {

    if (beneficiaryRequest == null)
        throw new IllegalArgumentException("beneficiaryRequest should not be null");

    String nni = beneficiaryRequest.getNni();
    String name = beneficiaryRequest.getName();
    String firstname = beneficiaryRequest.getFirstname();

    if (nni == null) {
        if (nniRequired)
            throw new IllegalStateException("nni is required but is null");

        if (name == null)
            throw new IllegalStateException("nni is null so name is required but is null");
        if (firstname == null)
            throw new IllegalStateException("nni is null so firstname is required but is null");
    } else {
        if (nni.length() >= 13)
            nni = nni.substring(0, 13);
    }

    return new IdentificationRequestBean(nni, name, firstname);
}
Messages postés
9
Date d'inscription
dimanche 24 novembre 2013
Statut
Membre
Dernière intervention
9 juillet 2021

Merci KX pour ta réponse.
Ne t'en fait pas pour les exceptions, ce qui m'importait c'était juste l'algorithme en tout cas grand merci.
Mon application permet de retrouver un client par sont nir (C'est le premier critère de recherche)
On doit aussi retrouver la personne avec son nom et prénom.

Merci