Validazione dei parametri in una catena di servizi

3

Abbiamo una catena di servizi A - > B - > C - > D. A definisce il formato di alcuni parametri dice ParamA B definisce il formato di alcuni parametri dice ParamB

D è quello che utilizza effettivamente questi parametri e C li passa a D. Il ruolo di C è quello di ottenere dati da D e fare un po 'di logica aziendale sopra e restituire a B e B restituirlo a A .

è una buona idea che C convalidi i parametri ParamA e ParamB o C non dovrebbero preoccuparsi dei Parametri e lascia decidere a D perché se il formato (un tipo di convalida) cambia C deve essere aggiornato. Quali sono i tuoi suggerimenti?

    
posta Adams 20.10.2017 - 05:44
fonte

2 risposte

3

La domanda decisiva che devi porsi: Da dove provengono effettivamente i parametri?

Se sai che tutti questi metodi sono in definitiva solo per una comprensione più chiara per il manutentore, e B, C e D sono sempre e solo chiamati da A, allora non ha senso verificare i parametri in più punti. Un posto ovvio per farlo è A, non appena possibile riceverli il più possibile.

Ma ovviamente l'ingegneria del software prospera sul riutilizzo, quindi se B, C o D dovessero essere riutilizzati un giorno in modo che altre parti del sistema li chiamino direttamente, ciò non vale più. Questo è il motivo per cui è chiaramente documentato quali sono le pre e post condizioni sui tuoi metodi è così importante.

    
risposta data 23.10.2017 - 10:14
fonte
0

Vorrei provare a fornire una risposta utilizzando una regola per la convalida degli argomenti nei metodi. Al momento di decidere quando gli argomenti dei metodi devono essere convalidati, la regola generale è:

  • Convalida solo i parametri dei metodi pubblici nelle classi pubbliche

Le eccezioni a questa regola sono:

(i primi tre vanno se vuoi essere più difensivo sulla validità degli argomenti)

  • metodi protetti di classi pubbliche
  • metodi pubblici delle classi interne
  • metodi protetti delle classi interne
  • se il controllo di validità sarebbe costoso o poco pratico e il controllo di validità viene eseguito implicitamente nel processo di calcolo

Applicato al tuo esempio, suggerirei che la responsabilità di ogni convalida dei parametri sia solo in un posto. Lasciami elaborare. Il controllo di integrità dei parametri può essere eseguito sul lato sorgente. Diciamo che ParamA dovrebbe essere un numero positivo. A può facilmente verificare se qualcuno ha inserito 0 o -5 come valore in ParamA. Tuttavia, la convalida semantica di solito può essere eseguita solo sul lato di destinazione, che in questo caso significa D.

Puoi, naturalmente, eseguire tutte le convalide in D, se decidi in seguito che qualcun altro diverso da A o B può usare D. In ogni caso è OK. Vorrei solo consigliare di disaccoppiare la logica di validazione da A, B o D inserendo la logica di validazione in classi separate, che potrebbero essere associate ad A, B o D. In questo modo, puoi facilmente spostare le convalide da A a D, dovresti decidere di farlo.

In entrambi i casi, non vedo un motivo per cui C dovrebbe verificare la validità degli argomenti passati a D. C è chiaramente solo un proxy qui e l'unica cosa che C dovrebbe convalidare sono i dati che riceve da D per poter eseguire qualunque computazione faccia.

    
risposta data 23.10.2017 - 12:49
fonte

Leggi altre domande sui tag