Evita di generare un evento quando non è necessario considerare l'ottimizzazione prematura?

3

Ho un TextBox personalizzato che convalida il suo input. Ogni volta che la validità dell'input cambia, viene generato un evento ValidityChanged e l'utente viene informato sui risultati della convalida. La mia domanda è cosa fare quando l'utente cambia l'input, ma l'input ha ancora gli stessi errori.

Ad esempio, supponiamo che l'input non debba superare i 3 caratteri e che contenga solo caratteri non numerici. Ora diciamo che l'utente inserisce 4 caratteri numerici. ValidityChanged viene generato e l'utente viene informato di entrambi gli errori. Tuttavia, sta aggiungendo un altro personaggio. Gli errori sono esattamente gli stessi (più lungo i 3 caratteri, contiene caratteri numerici), quindi non ci dovrebbe essere una notifica aggiuntiva.

In tal caso, dovrei addirittura aumentare ValidityChanged ? O dovrei controllare prima se i nuovi errori sono gli stessi di quelli precedenti e sollevare l'evento solo se gli errori sono diversi o è l'ottimizzazione prematura?

    
posta Sipo 15.12.2017 - 13:47
fonte

2 risposte

2

Tutto ciò che conta è perché tu sollevi l'evento ValidityChanged.

Come suggerisce il nome, è quando il controllo passa dall'essere "valido" a "non valido" o viceversa. Ciò che fa a cambiare è irrilevante; il fatto che abbia cambiato è tutto ciò che conta per l'evento.

Se stai sollevando questi eventi mentre l'utente digita , è probabile che riescano a ottenere alcuni di questi eventi in rapida successione. Questo è solo un problema se il consumatore di detto evento fa qualcosa di "stupido" con esso, come visualizzare una finestra di dialogo se il controllo non è valido ma - Good News - non è il tuo [immediato] problema.

... say the user enters 4 numeric characters.

Sorprendentemente, un utente non può farlo [facilmente]. Possono inserire un carattere, seguito da un altro, seguito da un altro (a meno che non incolla in un nuovo valore completo, tutto in una volta). Ogni [carattere singolo] modificato viene esaminato dal controllo e dalla sua validità complessiva valutata. Se quella validità cambia , si aumenta l'evento.

Forse la tua difficoltà è che stai chiedendo all'evento ValidityChanged di essere troppo utile e di cercare di "spiegare" cosa c'è che non va nel controllo.

Suggerirei che è il lavoro di una proprietà separata sul Controllo, che descrive l'errore [s] che affligge il controllo in quel momento. Qualsiasi gestore dell'evento ValidityChanged sarebbe in grado di esaminare questa proprietà per i dettagli cruenti.
In alternativa, il tuo evento ValidityChanged potrebbe includere quegli errori [di modifica], ma devi innalzare l'evento ogni volta che questi errori cambiano, così come per la "validità" complessiva del controllo.

    
risposta data 15.12.2017 - 14:21
fonte
1

Non innalzerei l'errore in primo luogo.

Il testo nella casella di testo è nuovo, quindi perché è necessario convalidare nuovamente il testo e non generare l'errore. Ma devi informare l'utente. Le routine di validazione non dovrebbero generare errori del genere perché il testo non valido è una condizione prevista.

Ciò che devi pensare è: come posso informare l'utente. Un popup nello scenario non è voluto perché non vorrei chiudere un popup dopo ogni lettera che scrivo. Un segno di spunta verde / croce rossa accanto all'input che cambia in base alla validità funziona. Questo si farebbe per qualsiasi cambiamento nella casella di testo.

Solo quando si invia il modulo lo si alza come un errore. Perché è un errore provare a inviare dati convalidati male. (Uso questa parola per mostrare che i dati sono controllati ma non hanno superato la convalida, che è diversa dai dati non validati)

    
risposta data 15.12.2017 - 14:02
fonte

Leggi altre domande sui tag