Esiste un modello comune per la gestione dei dati mancanti rilevati in profondità in un'applicazione?

5

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:

  1. 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 ()".

  2. 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?

    
posta Steve K 03.12.2016 - 01:15
fonte

3 risposte

1

La gestione comune (come la vedo io) è di sollevare un'eccezione e registrare l'errore. Avrai sempre casi in cui la logica di business arriva in posti dove nessuno è mai stato prima. Ciò significa che devi gestire l'eccezione con garbo:

  • informa l'utente sull'eccezione,
  • pulisci lo stack,
  • registra l'errore e
  • in seguito, controlla regolarmente il registro per i messaggi da pulire e fornire le correzioni.
risposta data 03.12.2016 - 09:39
fonte
0

Se il tuo processo è di lunga durata o mission critical, la preconvalida è un requisito.

La convalida profonda non richiede la rottura della separazione delle preoccupazioni. Una soluzione sarebbe quella di rendere ogni componente che consuma la configurazione per esporre il metodo di prevalidazione (dato che i componenti sono nidificati, anche questi metodi potrebbero essere annidati). Quindi, in una fase di modifica della configurazione, questi metodi sarebbero in grado di fornire una descrizione del difetto di configurazione comprensibile all'utente che esegue la riconfigurazione.

Tale controllo di precondizione viene spesso utilizzato con uno schema di comando: un comando composto esegue i controlli di precondizione per tutti i bambini prima che consenta l'esecuzione di sé.

    
risposta data 03.12.2016 - 12:43
fonte
0

Quando il tuo programma si imbatte in alcuni dati mancanti, deve funzionare correttamente, il che non può essere rimpiazzato in modo affidabile da un valore predefinito significativo, dovrebbe generare un'eccezione. In caso contrario, ciò maschererebbe gli errori gravi, genererebbe risultati errati o inaspettati o causerebbe il crash dell'applicazione, che probabilmente non è quello che desideri.

Tuttavia, fai attenzione con la soluzione proposta di "gestisci l'eccezione dei dati mancanti e consenti all'utente di correggere il problema nella sessione dell'applicazione corrente" . Se il tuo programma inizia a chiedere all'utente di inserire dati mancanti nel momento in cui il programma rileva il problema, potrebbe trovarsi nel bel mezzo di una transazione, o semplicemente non si adatta al processo di lavoro dell'utente. Ad esempio, l'utente che sta trattando il caso d'uso corrente potrebbe non avere i valori mancanti disponibili in quel momento, o potrebbe non essere la persona che può preparare i dati, oppure i dati necessitano di un controllo qualità speciale di un secondo persona, e così via.

Quindi - a seconda del caso di utilizzo effettivo - con un ulteriore "passo di validazione dei dati" prima dell'inizio del caso d'uso principale potrebbe essere la cosa giusta da fare, con l'opzione di risolvere il problema prima inizia il caso d'uso. Questo dovrebbe essere indipendente dal fatto che il tuo programma pubblichi le dovute eccezioni.

Non troverai un "modello comune" su come affrontarlo, perché questa non è una situazione "taglia unica". Ogni volta che si introducono i dati di configurazione in un processo aziendale in cui sono stati utilizzati valori precedentemente codificati, è necessario analizzare a fondo chi sarà responsabile della gestione di questi dati . Precedentemente, era lo sviluppatore dell'applicazione. Ora può diventare qualcun altro. Alcuni di questi tipi di dati potrebbero essere forniti al meglio da un amministratore, alcuni dallo stesso utente, alcuni da speciali utenti "potenti", magari in una fase di preparazione del caso d'uso. A volte, gli sviluppatori possono fornire buoni valori predefiniti per questi dati, ma fornire agli utenti la disponibilità a modificarli in seguito. E alcuni di questi dati potrebbero ancora essere gestiti al meglio dagli sviluppatori in esclusiva.

Dovrai decidere questo per ogni singolo attributo dei dati in gioco, non c'è un modo semplice per aggirare questo.

    
risposta data 03.12.2016 - 11:12
fonte

Leggi altre domande sui tag