Ereditato dalla classe Abstract rispetto ai tipi Enum per le eccezioni personalizzate

1

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.

    
posta Yogesh 30.07.2014 - 00:27
fonte

1 risposta

2

Il problema principale che avrai qui è che C # non ha modo di forzare i tuoi tipi di eccezione tra gli implementatori.

Il problema più grande per me è che questo implica che i tuoi plugin sono strettamente collegati al tuo regista. Normalmente mi aspetto una semplice API per la comunicazione tra il plugin e il director. Inoltre, questa eccezione personalizzata potrebbe eseguire codice quando generata, che per le mie ingenue sensibilità sembrerebbe essere una potenziale minaccia per la sicurezza.

In definitiva, direi che i timeout e i problemi di autenticazione sono di proprietà del codice che li tenta. Non ti fidi di un plugin per dirti che l'autenticazione è fallita, semplicemente non riesci ad autenticare il plugin. Se un plug-in si interrompe, si trova sull'implementatore per risolverlo. Trovo probabile che tu non voglia o abbia bisogno di questo tipo di diafonia nella tua applicazione.

    
risposta data 30.07.2014 - 01:02
fonte

Leggi altre domande sui tag