Ho un'interfaccia utente con numerosi controlli e input di dati. Pulsanti, campi di testo e caselle di controllo, ecc. Immagina che esistano le seguenti "regole" per un'interfaccia utente di esempio con 2 di questi controlli:
- B2 non può essere utilizzato fino a quando TF1 e TF2 hanno entrambi valori
- TF2 non può essere inserito fino a quando TF1 non ha un valore
- CB2 non può essere controllato a meno che TF1 abbia un valore
- CB2 non può essere controllato a meno che CB1 sia selezionato
Queste regole sono arbitrarie qui, ma ho una varietà di regole aziendali che alla fine regoleranno la funzionalità dell'interfaccia utente.
Vorrei implementare la logica per questo nel mio codice dell'interfaccia utente per far rispettare queste regole. Tuttavia, sto avendo difficoltà a determinare un buon modo per farlo. Posso pensare a due modi principali ma non sono nemmeno un fan di entrambi.
Metodo 1: aggiunta della logica a ciascun callback del controllo
Un modo per farlo sarebbe quello di aggiungere i controlli logici al callback di ciascun metodo. Quindi, per la prima regola, nel codice associato a B2, includere controlli codificati come if TF1 == ""
e if TF2 == ""
. Non sono un fan di questa idea, perché ho intenzione di disperdere ogni sequenza / logica in ogni parte della mia interfaccia utente e sembra inevitabile che a volte questo processo risulti oscuro e impossibile da rintracciare i bug. Sembra anche che la manutenzione sia incredibilmente complessa.
Metodo 2: crea raccolta di tutte le regole
Il modo in cui mi sto proponendo è la costruzione di una serie di regole. Il primo passo sarebbe definire un insieme di regole per "passare" per ogni tipo di controllo e le sue ricerche associate, come ad esempio:
- Per le caselle di controllo, "passa" seleziona "vero", "non riesce" se falso
- Per le caselle di testo, "passa" se non è vuoto, "non riesce" if=""
Posso quindi creare una raccolta di tutti i prerequisiti di verifica pass / fail per ciascun componente dell'interfaccia utente e dei componenti associati. Questo può essere astratto in un singolo metodo di controllo chiamato in ogni azione dell'interfaccia utente come:
- myChecker (mControlName)
dove myChecker è un metodo che scorre l'elenco di tutte le regole di corrispondenza, le controlla e restituisce vero / falso in base al passaggio delle regole. Questo metodo può essere chiamato da ciascun controllo dell'interfaccia utente prima che avvenga qualsiasi logica specifica del controllo.
Questo è bello, ma sembra creare le regole e non dimenticare che alcune potrebbero essere anche più complesse del primo metodo. Inoltre, tutti i tipi di controllo devono avere un criterio "pass / fail" o il metodo myChecker potrebbe diventare ridicolmente complesso con molte dichiarazioni difficili da leggere se.
Mi manca qualcosa? Ci deve essere un modello più chiaramente definito o una strategia migliore per incorporare questi tipi di validazione / regole in un'interfaccia utente.