refactoring per ereditarietà o composizione per grandi classi che dipendono dallo stato comune [duplicato]

0

Ho una grande classe (> 1000 linee), in cui tutti i metodi dipendono da un piccolo insieme di attributi in quella classe. Posso pensare a 2 modi rapidi di refactoring.

  1. Lo tengo come un oggetto enorme, ma divido i metodi correlati in classi separate da cui ereditro (ma non istanziamo quelle classi separate, solo l'ultima nella catena ereditaria). Questo probabilmente ha lo svantaggio che concettualmente, il mio oggetto è ancora un enorme monolite.

  2. Rendo gli attributi comuni, con alcune funzioni di aiuto, in una classe separata. Tutti gli altri codici che dipendono da questo stato comune sono nella loro classe, ma contengono lo stato comune attraverso la composizione. Lo svantaggio è che ho finito con un sacco di chiamate di ricerca annidate simili a self.commonState.foo , invece di solo self.foo .

Quest'ultimo sta diventando un po 'reminiscente del pattern MVC, ovviamente. C'è una risposta chiara a quale metodo è preferito?

    
posta funklute 24.01.2015 - 14:22
fonte

1 risposta

0

È difficile dirlo senza avere maggiori informazioni su ciò che fa la classe, ma ho affrontato lo stesso problema una volta e ho preso l'approccio della composizione al refactoring.

Il primo approccio mi sembra il schema di decorazione . A seconda di quale sia la natura della tua classe, potrebbe essere una buona soluzione, ma senza sapere molto altro non posso dirlo.

Torna di nuovo a quello che ho fatto: nel mio caso ho avuto una grande classe "Report" che legge da un database e ha formattato i dati in una scheda separata, applicando formati a date e numeri. Ho refactorato la composizione, separando tutte le informazioni e le operazioni di formattazione in una classe separata esattamente come la proponi e ho iniettato la classe "Format" nella classe "Report". Sono riuscito a ridurre drasticamente le dimensioni della classe originale, ma con molte chiamate di "nested lookup" .

Essendo pragmatico, e poiché l'approccio compositivo ha funzionato per me, posso dirti che è un modo sicuro per andare. Ma ti suggerisco anche di leggere il motivo del decoratore per vedere se ti si adatta concettualmente.

    
risposta data 24.01.2015 - 14:51
fonte