Come refactoring alla versione più pulita degli stati di mantenimento del widget

3

Backstory

Ho ereditato un sacco di codice che mi piacerebbe refactoring. È un'applicazione UI scritta in javascript.

Stato attuale:

Abbiamo un'applicazione principale costituita da diversi componenti dell'interfaccia utente. E ogni componente ha campi di inserimento, caselle di testo, menu, ecc.), Come "ticket", "informazioni sui clienti", ecc. Sulla base dell'input, da dove è stata chiamata l'applicazione, chi è l'utente, abilitiamo / disabilitiamo, nascondiamo, mostriamo , cambia i titoli.

Sfortunatamente, l'app è cresciuta fino al punto in cui è davvero difficile ridimensionarla, aggiungere nuove funzionalità. Principale il driver (codice dell'applicazione) chiama le funzioni di set / disinserimento dei rispettivi componenti. Quindi molte cose assomigliano a questo

Unità principale dell'app

function1() {
   **call_function2()**
   component1.setX(true);
   component1.setY(true);
   component2.setX(false);
}

call_function2() { 
       // it may repeat some of the code function1 called 
}

e ne abbiamo un sacco nel sindacato principale.

Sto pulendo questo casino. Qual è il modo migliore per mantenere lo stato dei widget? Per favore fatemi sapere se avete bisogno di me per chiarire.

    
posta George 24.06.2013 - 16:09
fonte

2 risposte

2

Ho appena fatto un refactoring simile. L'approccio che ho preso è stato invece di archiviare lo stato all'interno dei componenti, archiviarlo in una variabile state semanticamente significativa, che viene pubblicata sui componenti, che quindi gestiscono di conseguenza lo stato della propria UI.

Ad esempio, potresti avere una variabile userState con valori di unauthenticated , untrusted , trusted o admin . Il tuo controller funziona quindi deve semplicemente chiamare qualcosa come changeUserState(trusted) , che a sua volta chiama un userStateChanged(trusted) su tutti i componenti sottoscritti, che cambiano di conseguenza il loro stato dell'interfaccia utente.

Ciò che fa per te è decentralizzare la logica dello stato dell'interfaccia utente. Invece di ogni funzione del controller che deve monitorare lo stato di basso livello di ogni componente dell'interfaccia utente, le funzioni del controller gestiscono lo stato di alto livello e i singoli componenti traducono lo stato di alto livello nel loro stato di basso livello.

    
risposta data 24.06.2013 - 19:17
fonte
0

Il tuo problema sembra un classico candidato per un pattern MVC.

Se continui, probabilmente finirai per implementare la maggior parte di una libreria MVC. Probabilmente la soluzione migliore è passare a uno esistente: link sembra decente.

    
risposta data 24.06.2013 - 16:23
fonte

Leggi altre domande sui tag