sto praticando con OO JavaScript, facendo una sorta di web-app per la visualizzazione di Manga (fumetti)OO Javascript - Dovrei lasciare che una classe si aggiunga al DOM o lasciare che restituisca un elemento per poi aggiungerlo al DOM?
In questo momento ho un paio di classi:
- SearchResult
- Manga (generato da dati fuori del risultato della ricerca)
- capitolo (contenuta all'interno Manga)
- Pagina (contenuta nel capitolo)
- Immagine (contenuta all'interno di Pagina)
Aggiungo il risultato della ricerca al DOM generando l'html dell'elemento e quindi aggiungendolo con jQuery.
Questo è dove la mia domanda è disponibile in:
Devo generare html (o un elemento di jQuery DOM) e restituire questo da una funzione nella classe e quindi aggiungere questo elemento al di fuori della classe o sarebbe più saggio dare alla classe un riferimento al contenitore in cui inserire gli elementi e lasciarli mettere gli elementi in quel contenitore aggiungendo?
Quindi questo ?:
function(data, result, response) {
var
$resultContainer = $('<div/>', {class: 'row-fluid'}),
maxResults = 10;
for(var i in data) {
if(i == maxResults) {
break;
}
data[i].manga = Manga(data[i]);
var res = new SearchResult(data[i]);
res.setMyContainerElement($resultContainer);
res.addResultToDOM();
}
}
O questo ?:
function(data, result, response) {
var
$resultContainer = $('<div/>', {class: 'row-fluid'}),
maxResults = 10;
for(var i in data) {
if(i == maxResults) {
break;
}
data[i].manga = Manga(data[i]);
var res = new SearchResult(data[i]);
$resultContainer.append(res.getHTML());
}
}
In questi esempi "Dati" la variabile è dati da una chiamata AJAX che restituisce un JSON-stringa contenente i risultati, attualmente non c'è limite alla quantità di risultati restituiti, quindi l'ho impostato in modo hard-coded, lo aggiungerò quando andrò più in dettaglio sul lato server, ma per ora ciò andrebbe bene mentre lavoro sul front-end.
Se sono necessarie ulteriori informazioni, fatemelo sapere, aggiornerò volentieri con tutte le informazioni che potrei aver perso o che è necessario, se disponibile.
In teoria, il codice è più riutilizzabile se si restituisce la struttura dalla funzione * worker * e si lascia che la funzione * manager * che ha deciso di decidere cosa fare con esso. cioè "I lavoratori lavorano e gestiscono i manager". Passare il contenitore lungo l'albero del codice aggiunge dipendenze :) Non è facile, ma l'approccio migliore è pensare che ogni funzione venga scritta per qualcun altro e si desidera essere il più utile possibile. –
Questo è quello che ho pensato e fatto fino ad ora, ma ho pensato a cosa sarebbe successo se tu, per qualsiasi ragione folle, dovessi cambiare il modo in cui la classe ha funzionato e avrebbe prodotto qualcosa che non si sarebbe aspettato da nessuna il codice stava usando l'output della classe, questo significherebbe un sacco di refactoring. Modifica: Anche se di solito dovresti evitare questo, dato che c'è un sacco di codice che dipende dall'output di certe funzioni. Edit2: @TrueBlueAussie Hai ragione, in questo modo funziona più come un'API, di sorta, o in una vera e propria fabbrica, emettendo parti che devono essere utilizzate da processi esterni. – Magikaas
Se si modifica la struttura dei dati, ovviamente è necessario un refactoring, ma è preferibile spostare le decisioni/dipendenze fino ad un livello inferiore. Se vuoi essere forzato a rivedere il codice di alto livello che dipende dalla forma dei dati. –