2009-01-20 7 views
2

Où est l'endroit approprié pour effectuer la validation compte tenu du scénario/code ci-dessous:Où effectuer la validation des paramètres dans les méthodes imbriquées

En METHODA seulement: puisque c'est la méthode publique qui est destiné à être utilisé par des ensembles externes ? En MethodA et B puisque ces deux peuvent être accessibles en dehors de la classe? Ou les méthodes A, B et C puisque la méthode C peut être utilisée par une autre méthode interne (mais elle peut ne pas être efficace puisque le programmeur peut déjà voir le code pour MethodC et donc pouvoir connaître les paramètres valides)?

Merci pour toute contribution.

public class A 
{  
    public void MethodA(param) 
    { 
     MethodB(param); 
    } 

    internal void MethodB(param) 
    { 
      MethodC(param); 
    } 

    private void MethodC(param) 
    { 
    } 
} 
+0

Le code de chiffrement sur SO est fait en indentant toutes les lignes 4 espaces, pas par des étiquettes de code. –

Répondre

2

La validation des paramètres doit toujours être effectuée indépendamment de l'emplacement de l'appelant (à l'intérieur ou à l'extérieur de l'assemblage). Programmation défensive, on peut dire.

0

Il n'y a pas d'endroit 'approprié', sauf pour adhérer aux principes DRY et éviter de copier le code de validation à plusieurs endroits. Normalement, je suggère que vous retardiez la validation à la dernière étape possible, car si le paramètre n'est jamais utilisé, vous n'avez pas besoin de passer du temps à le valider. Cela donne également à la validation une certaine localisation à l'endroit où elle est utilisée, et vous n'avez jamais besoin de penser 'oh, ce paramètre a-t-il déjà été validé?' comme la validation est juste là.

1

MéthodeC; De cette façon, le paramètre est toujours vérifié, même si quelqu'un arrive plus tard et ajoute un appel à MethodC à partir de la classe A, ou bien fait que MethodC est public. Toute exception devrait être mise en place là où elle peut être mieux traitée.

0

Étant donné qu'un senario plus probable impliquerait chaque méthode ayant des paramètres différents et sans doute aussi une certaine logique de type

 
if (P1 == 1) { MethodA(P2) } else { MethodB(P2) } 

à hte long terme, il est plus logique de valider chaque paramètre au point d'entrée, escpecially comme vous pouvez avoir besoin d'une gestion différente des erreurs en fonction de l'endroit où la méthode hte a été appelée.

Si la logique de validation pour un paramètre donné commence à devenir complexe (c'est-à-dire plus de cinq lignes de code), alors considérez une méthode privée pour valider ce paramètre.