Gestione degli errori prevista

0

Diciamo che ho un sito web di social media. Su questo sito Web, gli utenti possono caricare diverse informazioni su se stessi, incluso il loro numero di telefono. Per implementarlo, ho una classe chiamata PhoneNumber che rappresenta il numero di telefono dell'utente. Ma i numeri di telefono sono opzionali. Ho questa classe PhoneNumber che dovrebbe garantire l'accesso al numero di telefono di un utente, ma non può. Come gestisco questo?

Il mio attuale approccio è, ogni volta che c'è un problema, assegnare un valore a una variabile error all'interno di PhoneNumber che rappresenta il problema in questione (questa potrebbe essere un'eccezione, una stringa o un codice di errore, è irrilevante per questa domanda). Ho anche aggiunto un metodo a PhoneNumber chiamato isPhoneNumberAvailable() che dovrebbe essere chiamato prima che venga utilizzato uno degli accessor. Se uno degli accessor viene chiamato e l'utente non ha aggiunto il proprio numero di telefono, lancio un IllegalStateException . Ma questa non sembra una buona soluzione. Non sono sicuro del perché, sono troppo nuovo per spiegarlo, ma sembra che questo potrebbe causarmi dei problemi lungo la strada.

Si noti che questa domanda è indipendente dal linguaggio, l'esistenza di un IllegalStateException in Java è puramente casuale.

EDIT: la soluzione sta migliorando il modello. Ho garantito l'accesso a qualcosa a cui non posso garantire l'accesso, che è un cattivo design. Il mio altro problema era con l'uso di una variabile error in scope di classe, ma questo va oltre lo scopo di questa domanda. Vedi la mia domanda di follow-up qui .

    
posta Trenton Maki 17.06.2014 - 07:34
fonte

2 risposte

1

Avrei solo la proprietà PhoneNumber sull'oggetto User impostato su null. In questo modo puoi testare if PhoneNumber == null , quindi l'utente non può chiamare il numero di telefono, quindi l'interfaccia utente non ha nemmeno bisogno di mostrare l'opzione (o mostrare che non c'è alcun numero di telefono).

Una volta fornito il numero di telefono, inizializza un'istanza della classe PhoneNumber con il numero di telefono dell'utente e assegna la proprietà PhoneNumber sull'oggetto User . Il numero di telefono dell'utente può essere convalidato la prima volta che viene fornito, e quindi sarebbe garantito esistere ed essere chiamato. Se la convalida fallisce al primo tentativo, genera un'eccezione durante l'istanziazione e quindi l'oggetto PhoneNumber non viene mai creato.

Se in un secondo momento hai deciso di avere più numeri di telefono, puoi aggiungere ulteriori proprietà a User (cioè User.HomePhone , User.MobilePhone ) o avere un elenco di PhoneNumbers che viene istanziato alla lista vuota. Quando vengono aggiunti i numeri di telefono, viene creato un nuovo oggetto PhoneNumber e aggiunto all'elenco. Entrambi questi approcci garantiranno inoltre di non avere mai un PhoneNumber a meno che non contenga un numero valido.

In effetti, ho fatto qualcosa di simile per una classe PhoneNumber per l'autenticazione a più fattori e questo approccio ha funzionato bene per me.

    
risposta data 17.06.2014 - 09:49
fonte
0

Penso che quello che stai chiedendo sia dove gestire possibili errori, giusto? Tra gli altri hai i modi in cui hai descritto:

  1. Il client chiede se i numeri di telefono sono disponibili. Questo ha il vantaggio di un'API pulita ed esente da eccezioni. Ma cosa succede se il cliente non ha mai chiesto prima di accedere ai numeri?

  2. Il tuo getter (all'interno del tuo PhobeNumber ) genera un'eccezione di nulla disponibile. Il vantaggio qui è che i clienti non hanno bisogno di ricordare due chiamate API.

Entrambi i modi validi per gestirlo e che scegli dipendono molto dalla tua applicazione e cosa pensi che dovrebbe accadere se non ci sono numeri di telefono disponibili. Personalmente preferisco le eccezioni perché non puoi dimenticarle, ma è solo una questione di stile.

È quello che stavi cercando?

    
risposta data 17.06.2014 - 08:00
fonte

Leggi altre domande sui tag