Creazione di un editor di grafici - Come creare un grafico guidato dai dati

5

Sto sviluppando un editor grafico che usa il drag and drop per costruire grafici gerarchici (contenenti nodi e collegamenti). Ogni nodo nel grafico dovrebbe essere collegato a una tabella nel nostro database (SQL Server). Ho fatto molte ricerche sulle librerie basate su specifiche javascript o / e JSON per disegnare nodi e collegamenti. Ci sono molti ottimi esempi da seguire, ma non ho idea di come sia possibile collegare un grafico a un database (SQL Server, Oracle, MySQL ...). Ho pensato a questa architettura ( Domanda pubblicata su stackexchange.com)

Ho esaminato la libreria D3 . Crea grafici basati sui dati, ma penso che utilizzi solo file flat e non database relazionali. Per prima cosa puoi dirmi se la mia architettura è ben pensata? E secondo puoi darmi qualche idea sul modo in cui posso collegare i miei grafici al DBMS? Grazie mille.

    
posta Believer 21.05.2013 - 17:12
fonte

1 risposta

1

D3 è una grande biblioteca, il cui design piuttosto intelligente è il risultato di molti anni di ricerca. È il discendente di Protovis , una biblioteca che era già molto carina a suo tempo. Quindi l'autore, Mike Bostock, passò a qualcosa di più dinamico (le differenze sono descritte qui ).

C'è una buona dose di stranezza a prima vista in D3. Il modo in cui leghi gli elementi visivi ai dati, rispondi alle modifiche, aggiorni i grafici, ecc. Potrebbe non sembrare intuitivo all'inizio. Ma dopo alcuni esperimenti, seguendo i numerosi tutorial e leggendo la documentazione estesa, diventi molto produttivo.

In un'approssimazione del primo ordine, puoi pensare a D3 come a un canvas SVG. Ti consente di creare e manipolare, non diversamente da jQuery, il DOM SVG in modo efficiente e multi-browser. Quindi rendersi conto che è possibile, invece di creare manualmente nodi SVG, definire mappature sistematiche (cioè dichiarative) dai dati agli elementi visivi. Inoltre, D3 ti consente di personalizzare, animare, consentire all'utente di interagire con il grafico e molte altre cose.

Per quanto riguarda la tua domanda sull'architettura, penso che la domanda SO che colleghi ti risponda per la maggior parte. Sì, è un suono ed è la strada da percorrere se si desidera estrarre i dati da un RDMS.

Il modo in cui di solito progettiamo le app D3 è il seguente:

  • si presume che la tua applicazione mangi i dati JSON - puoi sempre convertire altri formati in JSON sul lato server, e JSON è molto più flessibile di tutti gli altri formati (tranne forse XML ma una volta provato a json_encode() un array PHP, non si guarda mai indietro.
  • crea un file index.html statico, inserendo il codice boostrapping necessario in un file companion app.js (e magari un CSS - le solite cose). Potresti utilizzare uno degli esempi come punto di partenza.
  • crea un file data.json statico nel formato esatto che ti aspetti che il server invii i tuoi dati. Metti alcuni dati di esempio all'interno. Puoi anche inserire questi dati JSON direttamente nello script app.js - JSON è Javascript dopotutto.
  • lavora sulla tua logica di frontend, perfeziona il formato dei dati JSON, ecc. fino a quando non hai un prototipo decente.
  • configura un server web semplice (ad esempio Apache), fallo servire il file JSON e fai in modo che il tuo prototipo funzioni con questo invece del file locale
  • crea uno script sul lato server che generi lo stesso file "statico" (ad esempio utilizzando PHP). Metti alla prova la tua app.
  • avere lo script PHP connesso al database, generare il file JSON al volo e inviarlo

Ora puoi lavorare sul miglioramento dell'applicazione: definire URL diversi per estrarre flussi di dati diversi, creare mezzi per l'utente per filtrare i dati, ecc.

Queste sono solo idee per iniziare. Il punto qui è di ridurre al minimo la quantità di modifiche tra ogni passaggio, in modo da imparare le cose una alla volta e concentrarsi sulle parti che sono davvero difficili: l'applicazione client. Associare a un server che genera dati in tempo reale è solo un passo avanti quando si ha una buona app.

    
risposta data 22.05.2013 - 11:32
fonte

Leggi altre domande sui tag