Anti-spaghetti di
Sviluppare in modo efficace e facilmente mantenere un'applicazione JavaScript, al contrario di una serie di script ad hoc o di automazione entri non trasparente, è possibile utilizzare native Qooxdoo application. E 'impossibile coprire Qooxdoo senza scrivere troppo, ma in caso di applicazione nativa (da non confondere il termine con C o Java, Qooxdoo è puro JavaScript) è descritto come:
Per le applicazioni utilizzando HTML custom/GUI basate su CSS al posto del livello widget di qooxdoo.
Pertanto, tale applicazione non utilizza alcun livello di interfaccia utente Qooxdoo, ma solo strutture di struttura del codice e strumenti di creazione. Codice in Qooxdoo organizzato in classi, uno per file come in Java. Potrei assomigliare a questo:
/**
* @use(website.library.MosaicFlow)
*/
qx.Class.define('website.controller.Gallery', {
extend : website.controller.Abstract,
members : {
_baseUrl : 'https://picasaweb.google.com/data/feed/api',
_render : function(photos)
{
q('.preloader').remove();
q.template.get('gallery-template', {'photos': photos}).appendTo('#gallery-container');
var gallery = window.jQuery('#gallery-container .gallery').mosaicflow({
'minItemWidth' : 256,
'itemSelector' : '.photo',
'autoCalculation' : false
});
gallery.trigger('resize');
},
_convert : function(item, index)
{
try
{
return {
'url' : item.content.src,
'summary' : item.summary.$t,
'thumb' : item.media$group.media$thumbnail[0]
};
}
catch(ex)
{
this.debug('failed to convert', index, item);
return null;
}
},
_onLoadSuccess : function(event)
{
var request = event.getTarget();
var response = request.getResponse();
if(!qx.lang.Type.isObject(response) || !('feed' in response))
{
request.debug('Malformed response received');
}
else
{
this._render(response.feed.entry.map(this._convert, this).filter(function(item)
{
return !!item;
}));
}
},
_onLoadFail : function()
{
this.debug('Picasa search failed');
},
main : function()
{
var query = /^\/gallery\/(\w+)$/.exec(window.location.pathname);
var request = new qx.io.request.Jsonp(qx.lang.String.format('%1/all', [this._baseUrl]));
request.setRequestData({
'q' : query[1],
'thumbsize' : 300,
'max-results' : 20,
'alt' : 'json'
});
request.setTimeout(16000);
request.setCache(false);
request.addListener('fail', this._onLoadFail, this);
request.addListener('success', this._onLoadSuccess, this);
request.send();
}
}
});
Il modello di oggetto Qooxdoo sfrutta entrambi i mondi. In ha qualità di piattaforme mature come Java, allo stesso tempo è moderno e dinamico, fornendo classi, ereditarietà, interfacce, mixin, eventi, proprietà, data-binding e altro. Poiché ogni classe ha un nome definito e si trova in un albero dei nomi, il generatore di Qooxdoo può trarne vantaggio. Analizza le tue classi e costruisce i loro alberi di sintassi. Quindi risolve le dipendenze. Cioè quando fai riferimento a un'altra classe, ad esempio website.controller.Abstract
. Ciò porta al grafico delle dipendenze, che viene utilizzato per caricare gli script nell'ordine corretto. Nota che tutto è automatico e trasparente per uno sviluppatore e che i file vengono caricati così come sono. In caso di CommonJS non è previsto alcun tipo di implementazione, non c'è nessun brutto piano di lavoro per avvolgere il codice come con AMD.
Come si può vedere nell'esempio sopra, è possibile gestire librerie esterne non qooxdoo. È sufficiente scrivere un wrapper fittizio per una libreria per includerlo nel processo di creazione.
di sviluppo e di produzione ambienti
Si sviluppa costruire la vostra applicazione (build è necessaria solo quando nuova dipendenza viene introdotto nel codice), con la cosiddetta sorgente destinazione. I file dell'applicazione vengono caricati in ordine di dipendenza, uno per uno. I file di framework possono essere caricati uno per uno, o quale è l'opzione migliore, sono costruiti in diversi grandi blocchi. Nell'ambiente di produzione il codice dell'applicazione è costruito con obiettivo di compilazione. Hai un'opzione per produrre un singolo file di output, o hai una costruzione parziale, dove il codice è suddiviso in grandi file (puoi controllarne le dimensioni). accumulo parziale può assomigliare a questo (ottimizzata/compresso con gzip):
├── [127/64kB] website.f6ffa57fc541.js
├── [100/33kB] website.f86294b58d1a.js
└── [361/110kB] website.js
Nota che le parti sono caricati on-demand sulle pagine che li richiedono.
http://example.com/
└── website.js
http://example.com/article
└── website.js
http://example.com/form
└── website.js
└── website.f86294b58d1a.js
http://example.com/gallery
└── website.js
└── website.f6ffa57fc541.js
http://example.com/geo
└── website.js
Perché Qooxdoo non bersaglia sito conclamata costruisce ancora, ma fornisce solo una piattaforma di tipo applicazione nativa, è necessario codificare l'ingresso alla domanda e alcune nozioni di base, come il bootstrap, il routing dell'URL, ecc. Ho provato a risolvere questo problema con qooxdoo-website-skeleton, a cui appartengono gli esempi precedenti. Sei libero di usarlo o di scriverne uno tuo.
Infine, notare che potrebbe non essere facile da avviare come con la libreria JavaScript media, ma la complessità è proporzionale all'eventuale vantaggio.
+1 per l'ammissione di javascript non spaghetti per la prima volta. Per molti sviluppatori vivono negando troppo a lungo :) –