2013-08-08 11 views
5

In questo momento sto sviluppando una webapp abbastanza grande e complessa e devo gestire una quantità enorme di codice js lato client, e per semplificarmi la vita sto cercando di disaccoppiare questo codice tanto come posso.Disaccoppiare moduli javascript troppo complessi

Sono stato enormemente ispirato da Nicholas Zakas (http://www.youtube.com/watch?v=vXjVFPosQHw) e Addy Osmani (http://addyosmani.com/largescalejavascript) parlare dell'architettura scalabile di js e stava cercando di applicare alcune delle loro idee al mio lavoro.

ho separato tutto il mio codice attraverso le molteplici moduli indipendenti, e gestire tutti intercomunicazione con una sorta di mediatore . Questo approccio ha funzionato alla grande nella maggior parte dei casi. Ma ci sono alcuni casi in cui penso che non sia sufficiente.

Uno dei moduli su cui sto lavorando rappresenta una struttura piuttosto simile a una lista. Ecco alcuni esempio semplificato:

very simplified example

Oltre a una logica di rendering, modulo responsabile per questo pezzo di pagina deve gestire:

  • impaginazione
  • gruppi non girevoli
  • movimento elems e gruppi in giro con dnd
  • tagliare/copiare/incollare elem e gruppi
  • rinfrescante certaing gruppi/elems
  • certa logica all'interno elems
  • può essere più roba nel prossimo futuro

avevo svolto tutta la logica estranea che ho potuto (per esempio l'editing e la logica eliminazione viene condotta ad un altro modulo tramite eventi), ma la dimensione del modulo è ancora grande (oltre 1K di linee di codice), e non so come ridurlo. Inoltre sto usando il modello di modulo per i miei moduli, quindi è ancora più difficile separare la logica tra più file.

così sono venuto qui per chiedere c'è un modo per disaccoppiare logica complessa all'interno di un unico modulo?

UPDATE:

voglio chiarire una cosa. Sono abbastanza consapevole di come posso separare i moduli ("modulo" da un modello di modulo) su più file nel mio codice.

Ma quello che veramente cercando è la nuova logica modo per separare le preoccupazioni all'interno di un singolo modulo ("modulo" dalla presentazione NKZ).

+0

la domanda è un po 'vaga, ma in generale è possibile trattare un modulo come un programma e all'interno delle pareti del modulo è possibile creare sottomoduli, classi, tipi e funzioni pure per ridurre il disordine. i moduli autonomi sono in genere relativamente costosi, a causa del ridotto riciclo delle procedure interne; ex: una lista di sorter indipendente rispetto ad un plugin jQuery. I moduli sono meglio di un disastro, quindi sei sulla strada giusta. Padroneggiare i concetti di Dipendenza Iniezione e Inversione di Controllo è probabilmente necessario per portare il tuo scripting al livello successivo. – dandavis

+0

Le persone interessate a questo argomento potrebbero voler controllare [t3] (http://t3js.org/), un framework JS recentemente pubblicato dallo stesso Nicolas Zakas e dal suo team a Box, che deriva direttamente dai concetti delineati nella presentazione collegato nella domanda. [Ecco qui] (https://www.box.com/blog/introducing-t3-enabling-large-scale-javascript-applications/) un post sul blog di Zakas che lo presenta. – Nobita

+0

Ciao, questo è un po 'tardi ma potrebbe essere utile in qualche modo. https://pogsdotnet.blogspot.sg/2017/07/modular-javascript-architecture.html –

risposta

1

disaccoppiare un singolo modulo in più file mi consiglia di utilizzare il modello Augmentation trovato su questa pagina http://www.adequatelygood.com/JavaScript-Module-Pattern-In-Depth.html

Inoltre, qui ci sono alcuni più risorse sulla creazione scalabili le applicazioni JS:

Ecco un video di una presentazione di Nicholas Zakas su "Creazione di un'architettura di applicazioni JavaScript scalabile". http://www.youtube.com/watch?v=7BGvy-S-Iag

Un'altra buona risorsa http://addyosmani.com/largescalejavascript/

La conoscenza di questi concetti vi permetterà di costruire un'applicazione che è in grado di far cadere i moduli in modo trasparente e fuori. Sarai in grado di cambiare un modulo senza influire su nessun altro modulo perché il tuo programma si accoppierà liberamente. Inoltre, se scegli di cambiare una libreria di base, ad esempio KnockoutJS to Angular, questo framework ti permetterà di scambiare facilmente la libreria di base e senza interrompere gran parte del tuo codice.

Inoltre, l'uso di moduli e un mediatore o sandbox renderà il codice più facile da testare. Il test è importante in qualsiasi applicazione non banale. Spero che aiuti!

+0

Grazie a @Spencer. All'inizio, ero a conoscenza del pattern di Augmention, ma preferisco starne lontano perché non lo posso utilizzare per sfruttare alcune caratteristiche del pattern del modulo. Ad esempio, non posso avere uno scope privato per alcune funzioni e var. Ma, in realtà, non riesco a pensare ad una soluzione migliore per dividere un modulo (da un modello di modulo) su più file. In secondo luogo, ho già menzionato l'approccio di Nicholas Zakas e Addy Osmani alla creazione di app js scalabili, e ho già fatto uso di questo. – panfil

+1

E l'ultimo. Knockout o Angular, ovviamente, renderanno la mia vita più facile. Un po. Ma un altro quadro interessante non risolverà il problema di un'enorme concentrazione di logica in un unico luogo. – panfil

+0

Oops! Ho perso la parte in cui hai detto di aver letto le due fonti che ho fornito! Sfortunatamente, non sono a conoscenza di un modo migliore per spezzare i moduli in file separati oltre all'utilizzo del modello di incremento. – Spencer

Problemi correlati