J'ai 2 API de 2 sociétés différentes qui me permettent de communiquer avec leurs serveurs afin de traiter des transactions. Je suis chargé de créer une interface générique pour ces API. Je suis venu avec quelque chose comme ceci:Modèle de gestion des exceptions pour ce type de situation?
IServiceProvider <- ServiceProvider <- CompanyAServiceProvider
IServiceProvider <- ServiceProvider <- CompanyBServiceProvider
En CompanyAServiceProvider
J'utilise l'API qu'ils offrent à l'interface avec leurs serveurs distants. Cette API de la société A génère des exceptions totalement différentes de celles de la société B.
Je peux gérer l'exception localement mais je ne pense pas vraiment que la situation se corrode.
public String purchase(String amount) {
try {
request = new Request(RequestIF.NEW_ORDER_TRANSACTION);
} catch (InitializationException e) {
//do something.
}
}
Ou je peux jeter cette exception à l'appelant:
public String purchase(String amount) throws Exception {
request = new Request(RequestIF.NEW_ORDER_TRANSACTION);
}
Et que l'appelant poignée juste le Exception
, peu importe ce que cette exception est et peu importe ce que l'API jette.
Comment puis-je écrire une interface pour 2 API différentes et la garder générique quand j'ai affaire à 2 ensembles différents d'exceptions levées. Est-ce que je m'occupe de cela correctement? Quel serait le meilleur choix?
Oui, créez votre propre sous-classe Exception. Assurez-vous de prendre en charge le constructeur Exception qui prend une exception en tant que paramètre. Votre API peut créer des exceptions nommées pour donner un sens aux utilisateurs de cette API, et vous pouvez intégrer de manière appropriée les exceptions provenant des API tierces que vous utilisez. C'est la meilleure pratique. – Eddie
Que se passe-t-il si, au cours de l'achat metho, plusieurs exceptions différentes peuvent être générées par l'API de la société A? Est-ce que j'enveloppe chacun avec une classe d'exception différente que je crée? –
Si vous souhaitez fournir la sémantique de l'exception d'origine, vous pouvez créer plusieurs classes d'exception basées sur votre exception personnalisée d'origine: MyException, Failure1Exception étend MyException, etc. Vous pouvez ensuite déclarer MyException sur la méthode ou l'afficher Failure1Exception, Failure2Exception etc. – akarnokd