Lors de la création d'une bibliothèque, dois-je m'assurer que les méthodes privées doivent fonctionner comme prévu lorsqu'elles sont appelées non pas par d'autres méthodes de la même classe, mais par une autre bibliothèque par réflexion ?
Par exemple, si une méthode privée private DoSomething(int number)
s'attend à ce que:
number
est un entier positif non nul, et:- une variable privée
string abc
n'est pas nulle et pas une chaîne vide,
et complètement, laid échoue si ces deux conditions ne correspondent pas, dois - je gérer ces échecs , même si je sais que toutes les méthodes de la classe seront always¹ Assigner une valeur non-vide abc
avant d' appeler DoSomething
, et passer un entier non nul positif à cette méthode?
En d'autres termes, le code qui n'est pas protégé contre les appels dangereux par le biais de la réflexion peut-il être considéré comme un code de faible qualité , ou appartient-il à l'appelant qui utilise la réflexion pour s'assurer que l'appel ne casse rien?
Remarque: ma question ne couvre qu'un ensemble standard de bibliothèques. Cela ne couvre pas le code qui doit être hautement sécurisé (c'est-à-dire lorsque quelqu'un peut être intéressé par l'utilisation de la réflexion afin de la faire se comporter de manière inattendue ou se bloquer).
¹ Parce que la classe est correctement documentée, car il y a suffisamment de tests unitaires pour être sûr qu'aucun autre développeur ne cassera cette méthode, etc.
la source
Réponses:
En marquant votre méthode comme privée, vous avez établi vos intentions et un contrat. En utilisant la réflexion, un code client peut choisir de rompre avec ce contrat et devra donc en supporter les conséquences. La même chose se produit avec les protocoles, pour que les choses fonctionnent, les règles doivent être suivies ou de mauvaises choses se produiront.
Le même problème peut se produire avec d'autres langages tels que C ++ où j'ai vu des choses comme
En résumé - vous n'êtes PAS obligé de faire face à ces situations, l'appelant devrait être mieux informé.
la source
Si quelqu'un utilise la réflexion pour appeler vos méthodes privées, c'est un signe que quelqu'un fait quelque chose de mal. Soit il utilise le code d'une manière pour laquelle il n'a pas été conçu, soit vous cachez trop de fonctionnement interne et simplifiez l'API.
Mais il semble que vous n'en soyez pas encore à ce stade et que vous essayez simplement d'être préventif. Mon avis est donc: ne vous en faites pas. Une méthode privée devrait être considérée comme interdite; si quelqu'un viole délibérément ces limites, c'est son problème si les choses explosent.
la source
Eh bien, c'est toujours une bonne idée de valider les variables non locales avant de les utiliser, mais à part ça, je ne m'en inquiéterais pas. Comme les autres l'ont dit, vous avez établi vos intentions en rendant la méthode privée en premier lieu; quiconque l'appelle de l'extérieur de votre classe n'a aucune garantie. Lorsque je travaille en Java, je ne mets même pas de commentaires javadoc sur mes méthodes privées, car je ne veux pas que les autres développeurs sachent même qu'ils sont là.
la source