Ho un'applicazione di gestione della produzione che sono nel mezzo della riprogettazione per renderla più universale (abbiamo acquisito una piccola azienda e useranno anche lo strumento). Dove prima avevo molti valori codificati perché l'applicazione aveva un singolo client, ora è più una configurazione basata su vari elementi di dati provenienti da file di opzioni o tabelle di database. Questo è gratificante in quanto è un design migliore e l'applicazione si sta evolvendo, ma ha presentato una nuova sfida: servizi e componenti di basso livello che incontrano situazioni in cui mancano i dati.
Ad esempio, potrei avere un componente di generazione del numero seriale che usava una stringa codificata che userebbe come parte del numero seriale, ora che "il numero seriale di base" è generato dinamicamente e proviene da una stringa di formato memorizzata in la tabella dei prodotti. Esistono diversi livelli e classi tra i dati della tabella del prodotto e il componente che genera il numero di serie. Voglio gestire l'eccezione dei dati mancanti e consentire all'utente di correggere il problema nella sessione dell'applicazione corrente piuttosto che esplodere e bloccarsi.
Vedo due possibili approcci:
-
Aggiungi la convalida dei dati approfonditi sul punto di richiesta per assicurarti che sia tutto lì per evitare di incontrare eccezioni nel codice di basso livello. Non mi piace perché significa che il mio livello di presentazione avrebbe bisogno di avere conoscenza degli oggetti e dei dati coinvolti a valle o avrei bisogno di cospargere tutti i miei oggetti con i metodi "HasRequiredData ()".
-
Crea un nuovo tipo di eccezione che rappresenta il problema generale dei dati mancanti. Quando un componente di basso livello incontra una situazione in cui i dati di cui ha bisogno non sono disponibili, genererebbe questa eccezione. Il livello di presentazione gestisce quindi bene questa eccezione.
Quindi la mia domanda è: l'opzione # 2 sembra un buon approccio e un design per tutti voi? C'è un altro approccio comune a problemi come questo?