Sto creando un'interfaccia e vorrei che l'implementatore (i) di questa interfaccia generasse delle eccezioni nel caso in cui qualcosa andasse storto. Chiamiamo l'implementatore un plugin. Ho un direttore che può chiamare uno qualsiasi dei plugin. Piuttosto che ogni plugin che lancia la propria eccezione casuale, vorrei che i plug-in generassero specifiche eccezioni che il mio direttore può quindi gestire. Ad esempio: se i plug-in non riescono a eseguire l'autenticazione con le credenziali fornite dal director o se l'azione richiesta scade nel plug-in, il plug-in dovrebbe generare un'eccezione. Piuttosto che ogni plugin lancia la propria eccezione casuale, vorrei che i plug-in generassero specifiche eccezioni che il regista conosce e può gestire. Lo faccio perché se un'eccezione è fatale (come l'autenticazione fallita) non voglio riprovare, mentre se fosse un timeout, il regista potrebbe decidere di riprovare.
Ora, sono confuso su quale dei seguenti modi sia migliore:
Idea 1:
Crea un'eccezione personalizzata (diciamo PluginException
) e disponi di un tipo enum che tipi diversi di eccezioni (come authenticationfailed
, timeoutout
, permissiondenied
, ecc.) Il regista catturerà tutto PluginException
s e gestisce ogni eccezione caso per caso.
Idea 2:
Crea un'eccezione astratta (diciamo PluginException
di nuovo) e alcuni tipi di eccezioni derivano dalla mia eccezione astratta (come AuthenticationFailedException
, TimeoutException
, ecc.) Il regista può ascoltare qualsiasi eccezione specifica a cui è interessato e ascolta anche il più ampio PluginException
se nessuno dei suddetti tipi di eccezioni corrisponde all'eccezione generata dai plug-in.