Condivisione della logica di business tra lato server e lato client dell'applicazione Web?

2

Domanda veloce riguardante codice / logica condivisa nella parte posteriore e frontale di un'applicazione web.

Ho un'applicazione web (Rails + heavy JS) che analizza i metadati dalle pagine HTML recuperate tramite un URL fornito dall'utente (pensa Pinterest o Instapaper). Attualmente questa elaborazione avviene esclusivamente sul lato client. Il codice che recupera l'URL e analizza il DOM si trova in un insieme abbastanza grande di script JS nella nostra app Rails.

Occasionalmente desideri eseguire questa elaborazione sul lato server dell'app. Ad esempio, cosa succede se un utente ha fornito un URL ma hanno disabilitato JS o hanno un browser non standard compatibile, ecc. Idealmente mi piacerebbe essere in grado di elaborare questi URL in Ruby sul back-end (nei processi in background asincroni forse) usando la stessa logica usata dai nostri parser JS SENZA portare il JS in Ruby.

Ho esaminato i sistemi che consentono di eseguire script JS nel backend come execjs così come Ruby-to- Compilatori Javascript come OpalRB che si spera possano consentire "scrivere una sola volta, eseguirne molti", ma non sono sicuro che sia la decisione giusta.

Qual è il modo migliore per evitare la duplicazione della logica aziendale per le app che devono eseguire sia l'elaborazione lato client che quella lato server di dati simili?

    
posta thoughtpunch 24.06.2013 - 17:25
fonte

3 risposte

4

Cercare di interpretare una lingua in un'altra aggiungerà troppa complessità per non avere abbastanza benefici.

Se la quantità di logica è piccola, basta duplicarla sul lato client usando Javascript.

Se la logica è ampia e la tua architettura lo consente, crea un livello di servizi REST in Ruby che puoi chiamare usando AJAX.

    
risposta data 24.06.2013 - 17:37
fonte
2

In generale, direi che usare Node, ExecJS o qualcosa di simile sarebbe il modo per ottenere questo risultato - sono diffidente nei confronti di qualsiasi cross-compilatore del genere.

Detto questo, mi chiedo perché l'analisi del lato client sia importante in questo caso particolare. Avrai bisogno di alcune API per fare comunque richieste interdominio (ahem jsonp.jit.su ), quindi perché non averlo esegui anche l'analisi e fornisci un JSON strutturato su cui lavorare su entrambi i lati?

    
risposta data 24.06.2013 - 18:27
fonte
1

Whats the best way to avoid business logic duplication for apps that need to do both client-side and server-side processing of similar data?

Sì, questo è possibile. Ho usato node.js sul server, ed è per questo che dico a tutti di usarlo. Arriverà un giorno in cui avrai bisogno del tuo lato client roba sul server e viceversa ... Attualmente ci penso due volte prima di aggiungere qualcosa solo alla parte server dell'app.

Uso il sistema del modulo require.js sia lato client che lato server.

    
risposta data 15.10.2014 - 18:18
fonte