2010-02-18 3 views
3

J'écris un SDK .Net personnalisé pour le programme de cartographie MapInfo Pro, mapinfo expose seulement deux méthodes à utiliser sur COM void Do(string cmd) et string Eval(string cmd). Lorsque vous utilisez l'une de ces méthodes et que vous faites quelque chose invaild, il renvoie une exception COMException avec un message d'erreur et j'obtiens le code d'erreur de MapInfo. Ainsi, par exemple un message d'erreur ressemble à ceci:Création de classes d'exceptions pour les différents codes d'erreur lot

418 "Table not found." 

Maintenant, je voudrais lancer une sorte de sens pleine exception plutôt que juste une exception avec un nombre et un message que les gens doivent prendre ensuite utiliser un bloc if à vérifier quelle erreur, quelque chose qu'ils disent qu'ils veulent seulement attraper et faire quelque chose de sens avec. Quelque chose comme TableNotFoundException.

Le plus gros problème est actuellement 1999 messages d'erreur possibles, maintenant je ne veux pas une classe d'exception pour chacun de ces erreurs.

L'idée du SDK est que les gens utilisent mes objets et méthodes plutôt que Do et Eval (ils peuvent toujours les utiliser s'ils le veulent).

devrais-je,

  • partout dans mon SDK que j'appelle Do et Eval utiliser une prise d'essai puis vérifier le code d'erreur et jeter quelque chose de plus: complètement à partir de là, parce que je sais quelles erreurs je devrais .

ou

  • Je somekind de Dieu liste de recherche dans le Do et Eval que lorsqu'un COMException est jeté LookUps le code d'erreur et jette l'erreur meaningfull à partir de là? Signification Je n'ai pas d'envelopper chaque appel à Do et Eval dans des blocs de prises d'essai (il y a beaucoup d'appels)

Bit d'une chose difficile à expliquer, donc j'espère que les gens puissent le comprendre.

Merci.

Répondre

3

Enveloppez les appels à Do et Eval dans votre propre fonction qui intercepte les erreurs MapInfo. Comme il y a tellement de types d'erreur, vous pouvez créer une énumération avec des noms plus descriptifs ou des numéros d'erreur de mappage de dictionnaire vers des noms plus conviviaux (si les originaux ne sont pas assez bons) - vous ne voulez pas 1999 classes d'exception, donc je suggère d'utiliser une seule classe d'exception qui contient le numéro d'erreur et la description. Vous dites que les utilisateurs peuvent utiliser Do et Eval directement, alors ils devraient savoir comment gérer ces numéros d'erreur, de toute façon. Alternativement, vous pouvez créer quelques types d'exceptions hiérarchiques et décider lequel lancer (nécessite un mappage de dictionnaire 0-1999 => type d'exception correspondant). De cette manière, les utilisateurs peuvent être un peu plus précis sur les types de erreurs à attraper.

+0

++ Ce qu'il a dit, en particulier la partie concernant une petite hiérarchie d'exception. – Dustman

0

Selon AndiDog, créer quelques classes d'exception qui regroupent les quelques milliers d'erreurs dans certains types raisonnables. Vous devriez probablement toujours passer le numéro d'erreur original, juste au cas où.

Pendant que vous faites cela, lisez this article pour trier comment ces groupes pourraient être assemblés, et peut-être ceux que vous ne voulez pas attraper.

+0

Quelqu'un a des problèmes de SEO? Pourquoi changer le texte du lien avec tous les nofollows? – Dustman

Questions connexes