Comment, lors du développement d'un projet de taille moyenne, identifiez-vous, créez-vous et maintenez-vous des codes d'erreur?
Pour ma vie, je ne peux pas penser à une méthode simple et propre de le faire. Certaines de mes idées convertissent les noms de classe et le nom de méthode en une chaîne entière, mais c'est trop long à afficher à l'utilisateur en plus du fait que les noms de méthode et les noms de classe peuvent changer (heureusement pas!). D'autres utilisent simplement un système de journalisation incrémentiel (c.-à-d. Chaque fois que je crée un nouveau message d'erreur, ajoutez simplement 1 au dernier identifiant de message d'erreur). Mais ce n'est tout simplement pas organisé.
Pour être plus précis, je parle de code d'erreur comme:
Error 401 Unauthorized.
la source
Réponses:
Non.
Les codes d'erreur sont un anachronisme, ils proviennent de l'époque où la sortie était vraiment difficile et coûteuse, et la seule façon de signaler une condition d'erreur peut avoir été à travers un tas de voyants du panneau avant:
De nos jours, nous avons une gestion des exceptions mature intégrée dans à peu près tous les langages traditionnels. Utilise le. Donnez à l'utilisateur les informations avec lesquelles il peut travailler; ne les dérangez pas avec des bla blas techniques, mais dites-leur plutôt ce qui s'est mal passé et ce qu'ils peuvent faire à ce sujet. Pour la journalisation, donnez simplement à vos exceptions des noms descriptifs et enregistrez le nom. Plus facile à mémoriser et aussi plus facile à trouver en utilisant grep ou des outils de recherche similaires.
L'exception est, bien sûr, lorsque vous programmez pour des situations où la sortie est toujours difficile et coûteuse, comme les systèmes intégrés ou les protocoles réseau. HTTP utilise toujours des codes de réponse numériques car ils sont extrêmement faciles à analyser efficacement - dans certaines situations, lire uniquement le premier chiffre peut déjà vous en dire assez, et vous pouvez jeter le reste du paquet.
la source
Vous devriez vérifier comment les codes d'erreur / d'état sont organisés dans des protocoles courants tels que HTTP . Ils réservent des plages distinctes pour différents types de statuts / erreurs. Cela permet aux utilisateurs d'identifier plus facilement un code d'état inconnu et aux développeurs d'attribuer un code pour un nouveau type d'erreur qui n'a pas été traité auparavant.
la source
Désolé, pourquoi utiliser des codes d'erreur?
Saisissez l'exception, connectez-vous et proposez d'envoyer un rapport si le programme ne peut pas récupérer .
(En supposant que votre langue prend en charge les exceptions.)
La seule information pertinente qui pourrait vous aider à corriger le bogue est la trace de pile que vous n'obtenez pas avec un code d'erreur. (Je suppose également que vous souhaitez utiliser des codes d'erreur pour les rapports d'erreur et ne pas les jeter sur le visage d'un utilisateur.)
la source
Je vais supposer un contexte procédural (C). Si vous avez des objets, un objet d'erreur est généralement préférable, qu'il s'agisse d'exception ou non.
Vous devez utiliser des codes d'erreur locaux pour chaque module. Pour une bibliothèque, vous pouvez avoir un en-tête spécial répertoriant les codes d'erreur, avec le numéro 1, 2, etc. (ou -1, -2 si vous préférez). Assurez-vous de toujours renvoyer l'un de ces codes, par exemple traduire
errno
dans vos propres codes. Si vous avez plusieurs couches de modules, traduisez à chaque étape (ou prédéfinissez une plage pour l'erreur plus profonde, par exemple les valeurs 1001 - 1050 proviennent de cet autre module).Il est également important de fournir un moyen de traduire le code en chaîne. Vous ne devez jamais signaler uniquement le code, cela ne mène qu'à la frustration. En fait, à peu près n'importe quel code dans votre application devrait être fourni avec une fonction de traduction de chaînes. Par exemple, libc a généralement
strerror
etstrsignal
, mais manque malheureusementstrwaitstatus
.la source