Regole di convalida dei file

1

Ho un'applicazione in grado di accettare file CSV per eseguire alcune operazioni. I file assomigliano a:

CREATE USER:username,last_name,first_name,age
user1,Smith,John,23
user2,Poppins,Mary,257

Esistono numerosi comandi che possono essere utilizzati, ciascuno con una specifica "sintassi" in termini di quali colonne sono richieste / autorizzate, il tipo di dati in ogni colonna, valori validi e regole più complesse (ad esempio 2 gli utenti non possono avere lo stesso nome utente, il nome utente non deve essere già presente nel database, ecc.).

Al momento, ognuno di questi comandi corrisponde a una classe specifica nel mio modello OO che esegue la convalida con il codice ( if (type(column) != STRING) blabla ) prima di eseguire i comandi.

Questo sta diventando ingombrante e vorrei estrarre le regole di convalida in formato leggibile dall'uomo, ad esempio:

Command=CREATE USER
Field='username', required, text, max_length=255, min_length=1,
      unique, not exists in db table 'User'
Field='age', optional, number, min=0, max=120
....

Il mio codice potrebbe quindi diventare:

List<Error> errors = validate(csvFile, rulesFile);
if (errors.isEmpty()) //good to go

Tuttavia più ci penso, più sembra che sia un grosso mal di testa codificare ed effettivamente un intero progetto in sé, forse non vale il tempo speso.

Quale approccio potrei adottare per estrarre regole in formato leggibile dall'uomo senza complicare eccessivamente il codice di convalida?

    
posta assylias 22.05.2015 - 20:05
fonte

1 risposta

2

Smart data structures and dumb code works a lot better than the other way around. -- Eric S. Raymond, The Cathedral and the Bazaar

È possibile utilizzare XML o JSON con schemi. Le regole di convalida devono essere prima leggibili dalla macchina e, se possibile, leggibili dall'uomo. Considera non che inventa il tuo formato e utilizza Schema XML o Schema JSON . Passare a XML / JSON non dovrebbe essere molto difficile, dal momento che sono disponibili molte librerie.

Ciò che hai ora è fondamentalmente una forma di RPC basata sul formato CSV. Forse dovresti esaminare JSON-RPC o qualcosa di simile.

    
risposta data 22.05.2015 - 21:59
fonte

Leggi altre domande sui tag