Come gestire diversi tipi di errore in una funzione

0

Contesto

Sto lavorando al refactoring di un programma che salva i dati in un DB. Questo programma ha un'interfaccia grafica.
Il programmatore che ha fatto questo programma (quello per cui lavoro) vorrebbe che io rendessi questo progetto coerente con MVP.
Uno dei limiti del mio lavoro è provare a non modificare il codice aziendale originale, quindi anche se il codice è "MVPized" sarà facilmente comprensibile.

Informazioni sul codice

Abbiamo una funzione che salva un oggetto nel DB scritto nella vista. Quindi, invece di restituire errori, mostra direttamente il messaggio di errore.
Quei messaggi a volte sono frasi complete, a volte sono codici di errore.

Ho ~ 10 possibili errori nella funzione: Verifica se ogni campo non è vuoto, con un messaggio per ogni campo, Verifica se i valori non sono già usati, Verifica se il salvataggio nel database è andato a buon fine, controllo se una applciazione esterna è andata bene con la funzione nativa per dare un messaggio di errore (diverso dal controllare il campo per esempio). Ogni controllo come proprio messaggio di errore con a volte una speciale funzione nativa chiamata per dare il messaggio di errore ..

Quindi, ho spostato questa funzione nel modello e ho reso questa funzione restituita i codici di errore usando un tipo di enumerazione (o almeno provato), ma la conseguenza è che ora ho molti codici di errore diversi.
Ora ho quasi finito di refactoring questa funzione, ma non mi sento ho fatto la cosa giusta facendo questo.
Quindi la mia domanda è: creare molti codici di errore diversi è una buona idea? O più precisamente, è una buona idea avere un sacco di diversi codici di errore in una sola funzione?

    
posta Freddykong 25.07.2017 - 10:22
fonte

2 risposte

1

Se i molti codici di errore dovrebbero essere generati in una singola funzione, può essere una questione di quanto lontano prendere il Principio di Responsabilità Unica. MVP ti dice di dividere il rilevamento degli errori dalla reazione a, o la presentazione degli errori. I motivi includono testabilità, interfacce alternative o riusabilità del modello e sono la chiave per prendere una decisione. La testabilità è stata una linea più facile per me da vedere. Altre ragioni sono più sulla tua situazione particolare. Speculare cosa potresti fare in futuro è un altro modo per trovarli, ma può portare a complicazioni inutili. Tuttavia, può essere un degno esperimento di pensiero. Quali altri usi realistici della funzionalità sarebbero resi più facili o più difficili dividendo o combinando le funzioni?

Quindi i singoli errori verificano le singole cose? Possibilmente. I codici di errore hanno senso da un punto di vista MVP in cui si separa l'errore dalla sua presentazione. La decisione di dividere la logica di rilevare ogni errore in una funzione separata diventa arte. Se sono relativamente semplici, potresti vederli tutti rilevati nella stessa funzione. Se sono complessi, il test potrebbe essere più semplice o avere più senso in funzioni separate in cui è possibile impostare separatamente. Alcuni test potrebbero avere senso per andare insieme, ad esempio se si tratta davvero di due valori.

In sintesi, dipende e il codice circostante dovrebbe aiutarti a decidere. Considera ogni idea e giudicala in base alla confusione e alla restrizione. Troppe piccole parti che fanno veramente parte della stessa cosa, o un grosso blob che si lega a molte cose diverse insieme.

    
risposta data 22.11.2017 - 16:17
fonte
0

Sì, avere i codici di errore è sempre una buona idea perché è facile mantenere e modificare quei messaggi di errore quando necessario, ma il punto principale è avere tutti quei codici di errore in un unico posto o renderlo globale

  1. Prova a utilizzare le eccezioni nei modelli
  2. Gestire classi separate per gestire errore di sistema, errore del browser, errore dell'interfaccia utente ecc. - se possibile, definire il codice di errore come se l'errore avesse già avuto il codice come i codici di errore http, quindi non cambiarli ad es.

    if (this->error->getCode() == '404') 
    {
      header("HTTP/1.0 404 Not Found");
     } 
    Errorclass::raiseNotice( 100, 'Notice' );
    Errorclass::raiseWarning( 100, 'Warning' );
    
  3. Crea classi helper o file di configurazione per gestire errori e codici di errore

risposta data 25.07.2017 - 11:08
fonte

Leggi altre domande sui tag