Selezionata vs eccezione non selezionata durante la convalida dei documenti in questo servizio

3

Ho un servizio che consente agli utenti di aggiungere contenuti dinamici a un repository. Quindi in pratica ho una classe Documento generica che contiene un elenco di proprietà per quell'oggetto specifico a seconda del tipo di documento che l'utente sta aggiungendo (ad esempio un documento di fattura ha una proprietà di numero di fattura mentre un documento wiki ha una proprietà di autore, quindi on).

Il servizio è composto da diversi livelli e ad un certo punto ho una classe che deve controllare se il documento da aggiungere è conforme al configuratore delle regole, valutando se tutte le proprietà richieste sono fornite, se sono tutte di destra tipo, ecc. Se una di queste convalide fallisce, voglio lanciare un'eccezione personalizzata che contenga lo stato di convalida.

La domanda è:

  • La mia ValidationException dovrebbe essere selezionata o deselezionata?

Ho letto molte best practice su come decidere quale tipo di eccezione utilizzare. Stavo pensando di usare RuntimeException ma in questo caso l'eccezione non è causata da errori nella codifica o cose del genere ma solo dall'input dell'utente ...

D'altro canto usare un'eccezione controllata significherebbe propagare la sintassi "getta" in tutto il livello precedente dell'applicazione e probabilmente nel 90% dei metodi del servizio che rendono il codice molto meno leggibile e mantenibile.

    
posta Nicola 08.08.2014 - 15:15
fonte

2 risposte

5

Penso che i documenti Oracle non possano essere più espliciti al riguardo:

Generally speaking, do not throw a RuntimeException or create a subclass of RuntimeException simply because you don't want to be bothered with specifying the exceptions your methods can throw.

Here's the bottom line guideline: If a client can reasonably be expected to recover from an exception, make it a checked exception. If a client cannot do anything to recover from the exception, make it an unchecked exception.

Fonte qui ...

Sei l'unico che sa se questo è il caso.

Credo che il vero problema non sia se dovrebbe essere un'eccezione controllata o non controllata, ma i molti livelli che dovresti propagare l'eccezione verificata (come hai detto tu) per gestirla correttamente. Forse potresti dirci qualcosa in più sul tuo design.

    
risposta data 08.08.2014 - 17:14
fonte
1

Dovresti usare un'eccezione controllata in modo che il compilatore ti ricordi sempre di prenderlo.

Se la validazione fallisce, si vuole comunque catturare quell'errore, quindi perché usare eccezioni non controllate e magari dimenticare che questa eccezione può essere lanciata.

Per maggiori dettagli su questo caso particolare puoi anche leggere: link

    
risposta data 06.11.2015 - 09:43
fonte

Leggi altre domande sui tag