Utilizzo di un motore di regole per gestire la convalida lato client e lato server delle regole aziendali?

4

Qualcuno è riuscito a utilizzare un sistema di regole comuni tra il frontend e il backend?

Simile a questa domanda: Gestione delle convalide lato client e lato server in un posto , sto cercando di trovare un modo per applicare regole aziendali coerenti sul fronte (JS) e sul back-end (Java). A differenza di questa domanda, però, non sono interessato a un sistema di convalida generale del campo multipiattaforma (non sono fuori per convalidare la lunghezza del campo).

Un esempio di regola aziendale può essere qualcosa del tipo:

If the user's age is under 18, then a parent's email is required.

In questo caso il nullable di un campo modulo cambia in base all'input da un'altra parte del modulo.

In modo che il sistema consenta:

{"user":"Bob","age":33}

{"user":"Carol","age":15,"parent_email":"[email protected]"}

Ma nega:

{"user":"Alice","age":16}

Un motore di regole come Drools può creare e applicare regole aziendali sul back-end, ma solo in una JVM (o CLR).

La soluzione predefinita sembra avere due diversi set di regole che non resteranno mai sincronizzati e causeranno tutti i tipi di problemi di validazione e casi limite.

Mi piacerebbe sentire alcuni successi, fallimenti o tecniche migliori per affrontare questo problema.

    
posta Sherman 09.07.2015 - 06:23
fonte

2 risposte

3

Questo è legato alla programmazione dei vincoli. Prolog è un esempio di un tale sistema. Esistono implementazioni javascript di prolog link . Potresti quindi creare il tuo programma prolog e utilizzarlo sia sul server che sul client.

Un altro approccio sta avendo tutta la logica sul lato server ma la espone come una API che il client potrebbe quindi interrogare usando ajax. Sarebbe quasi uguale per l'utente con l'eccezione di un possibile piccolo ritardo.

    
risposta data 09.07.2015 - 08:48
fonte
1

Che ne pensi di considerare un modello di programmazione che traspone in Javascript dal lato client? Se si vive in un mondo Javascript / JVM, allora potrebbe essere scala.js, se si usa il clr potrebbe essere F # con Fable o F # con websharper. Almeno la rappresentazione della regola sarebbe in un'unica lingua di partenza sia per client che per server.

    
risposta data 10.03.2017 - 04:01
fonte

Leggi altre domande sui tag