È necessario un passaggio di convalida vuoto se non vengono fornite regole? [chiuso]

1

Se ho una classe di validatore con una funzione di convalida che accetta un ruleContainer come input. La convalida deve passare se il contenitore è vuoto (meno stupore?) O dovrei lanciare un'eccezione o semplicemente restituire false?

    
posta donquixote 29.09.2017 - 19:57
fonte

2 risposte

0

Should the validation pass if the container is empty ( least astonishment?)

Sì.

Rispondere alla domanda a livello di astrazione che stai proponendo, ovvero senza assumere o imporre requisiti di dominio aggiuntivi.

Se consideriamo che ruleContainer contiene un insieme di regole che sono vincoli e che tutte le sue regole sono prese insieme in combinazione (ad es. ANDed). Quindi, l'assenza di regole suggerisce l'assenza di vincoli e quindi l'assenza di violazioni. Quindi, la convalida dovrebbe avere successo. Questo sarebbe l'approccio logico. In altre parole, solo se una o più regole vengono violate, la validazione fallire.

Questo da Logical Conjunction

The conjunctive identity is 1, which is to say that AND-ing an expression with 1 will never change the value of the expression. In keeping with the concept of vacuous truth, when conjunction is defined as an operator or function of arbitrary arity, the empty conjunction (AND-ing over an empty set of operands) is often defined as having the result 1 [or true]. [my emphasis]

Quando cambiamo il comportamento del set vuoto dal comportamento logico / previsto (ad esempio, quando si fornisce o quando si restituisce un set vuoto) significa che il codice client chiamante dovrà considerare questo caso speciale e, l'intento del la traduzione può essere persa dal chiamante. La gestione dei casi speciali (dall'implementazione o dal client o entrambi) non è necessaria e potrebbe anche indicare ulteriori test, poiché può essere soggetta a errori.

    
risposta data 29.09.2017 - 20:38
fonte
3

Questo dipende dai possibili motivi per cui ruleContainer potrebbe essere vuoto e i requisiti per la classe del validatore.

Se un ruleContainer vuoto non dovesse accadere (e quindi indica un problema nel programma), lanciare un'eccezione sarebbe la cosa migliore.

Se la convalida dovesse passare se passano tutte le regole, sarebbe più logico considerare che tutte le 0 regole di un contenitore vuoto passino tutte e quindi i passaggi di convalida.

Non riesco a pensare alla cima di un caso in cui un contenitore vuoto dovrebbe significare che la validazione fallisce, ma non posso escludere che qualcun altro possa farlo. In tal caso, dovrebbe essere chiaro dai requisiti che la convalida dovrebbe comportarsi in questo modo.

    
risposta data 29.09.2017 - 20:38
fonte

Leggi altre domande sui tag