Strategia raccomandata per la modifica della libreria di tabelle dell'interfaccia utente javascript?

0

tl; dr - Su una libreria di griglia angularjs esistente, mi sto spostando su un'altra. È meglio cancellare il maggior numero possibile di codice e in un certo senso di codice da zero nello stesso set di funzionalità, o aggirare il problema? C'è un modo consigliato (o anche una buona idea) per cercare di sfruttare ciò che è lì?

Miglior contesto:

Il mio team ha ereditato un'app Web esistente, in esecuzione nella produzione e utilizzata dai consumatori. Il componente principale & Il set di funzionalità si trova attorno a una tabella / griglia, ci sono modifiche collettive, modifiche in linea, azioni per riga, ecc. Il codice non è fantastico, ha molte variabili globali su $ scope in quanto la griglia interagisce con i filtri e i grafici sulla pagina. La copertura del test è mediocre, abbiamo aggiunto unità e amp; test funzionali per darci più fiducia nell'apportare modifiche, ma non è al 100%.

A livello aziendale, negli ultimi mesi è stata scelta una nuova libreria per le griglie, per standardizzare il comportamento e il look & sensazione di tutti i diversi team che utilizzano diverse librerie di griglia.

Siamo vicini per iniziare la mossa e sto cercando pensieri su come meglio procedere. Cancelliamo i controller principali & Servizi? Mantenere i test unitari e usarli come specifiche delle caratteristiche?

O refactoring pezzo per pezzo e lascia il vecchio codice nei file accanto ai nuovi?

    
posta Gavin Fitzgerald 13.07.2016 - 17:12
fonte

1 risposta

0

Vorrei andare per funzionalità. Prendi quindi ogni problema (modifiche collettive, modifiche in linea, azioni) come attività separata. Quindi installerei una nuova pagina, in modo che entrambi possano essere funzionali allo stesso tempo, con la nuova libreria.

Passaggi di base

Per problema, farei quanto segue:

  • Verifica i test end-to-end e controlla se sono completi, quindi tutte le funzionalità sono coperte.

  • Reindirizza i test end-to-end per questo problema nella nuova pagina (quindi ora sono danneggiati). Puoi farlo questo alla volta fuori rotta. Se lo desideri puoi persino duplicarli per continuare a eseguirli entrambi contemporaneamente per l'implementazione nuova e vecchia.

  • Trasforma la nuova funzione in modo che i test inizino a passare.

  • Rivedi i test delle unità pertinenti per questa funzione e duplicali per testare il nuovo codice. Ad esempio, se si sta testando un gestore eventi con i test delle unità: decidere dove deve vivere la logica di business, probabilmente in un oggetto. Quindi, copia la regola, ma ora prova l'oggetto. Anche in questo caso puoi mantenere in esecuzione i vecchi, ma contrassegnali in modo da sapere che hai integrato questa regola aziendale nella nuova soluzione.

In questo ci sono molte decisioni da prendere come:

Decisioni da prendere

  • Il codice lato client è implementato in un oggetto separato o solo in gestori di eventi inline? Se in linea li sposterei prima su un oggetto, quindi lascia che la nuova griglia chiami l'oggetto. Quindi ottieni responsabilità separate. Come un oggetto di modifica collettiva.

  • NON proverei a toccare tutti i livelli allo stesso tempo. Se i controllori stanno bene, lasciali per ora. Nel caso tu debba cambiarli, sei ancora sicuro perché i test end-to-end che hai controllato.

  • Se in linea è probabile che non sia ben testato. Crea (e riutilizza) i test per assicurarti che la funzionalità sia ora stabile.

  • Riesamina i problemi di layout / modifiche perché la nuova griglia potrebbe essere diversa.

  • Considera l'aggiornamento di manuali / schermate.

Quando hai finito puoi tornare al vecchio URL quando preferisci.

La prossima volta sarà più facile sostituire la griglia perché è abbastanza separata.

Esempio di test unitario:

Vecchio:

Test.add('Add row', function (test) {
  var Grid = newGrid(3); // get grid with 3 rows
  Grid.events.trigger('addRow'); // Old event handler call
  // Can even be outside the object on a global, more ugly:
  // Events.call('grid1', 'addRow');
  test.equals(4, Grid.length);
});

Test.add('Add row', function (test) {
  var Grid = newGrid(3);
  Grid.addRow(); // new event handler call
  test.equals(4, Grid.length);
});

Non è necessario rimuovere tutti i test di unità. Basta cambiare i pezzi rilevanti nella tua nuova copia dovrebbe essere sufficiente. Chiaramente avrai vecchi test che diventano irrilevanti e dovrai aggiungere nuovi test in cui scrivere il nuovo codice.

    
risposta data 14.07.2016 - 12:03
fonte

Leggi altre domande sui tag