Utilizzo di due versioni di una classe nello stesso codice

2

Nel mio lavoro, nel nostro progetto principale, abbiamo una classe di Validazione che si è evoluta con gli anni. Ee ha un vecchio progetto con una classe User che usa una vecchia versione della classe Valdiation.

E dobbiamo aggiornare alcune funzionalità che richiedono nuovi metodi di convalida. Tutti questi metodi sono implementati nella nostra ultima classe di convalida.

Ma la nuova classe di convalida non è retrocompatibile, quindi non possiamo semplicemente mettere quella nuova al suo posto.

Ho pensato che una buona soluzione sarebbe quella di aggiornare tutto il codice che fa riferimento alla classe di convalida o renderlo compatibile all'indietro ma, ovviamente, entrambi richiederebbero molto tempo.

Infine, è stato deciso che l'aggiunta dell'ultima versione e la relativa chiamata Validation2 funzioni correttamente, alcuni metodi utilizzano Valdiation e altri Validation2. Penso che in seguito porteranno molti problemi, perché non sai quando usarne uno o l'altro dato che i nomi smettono di essere significativi.

Quale potrebbe essere l'opzione migliore per affrontarlo?

Inoltre, la classe Validation è stata l'esempio migliore, ma abbiamo lo stesso problema con molte classi più grandi e più complicate e ora abbiamo un sacco di classi "duplicate". La lingua è PHP, ma potrebbe succedere anche in altre lingue.

    
posta Pablo González Alba 18.07.2013 - 16:12
fonte

3 risposte

3

Se le classi rappresentano concetti diversi (in questo caso sono agenti diversi che eseguono compiti diversi), devono avere nomi diversi.

Al tuo posto darei loro nomi diversi che rappresentano le particolarità della loro natura. Non solo un numero di versione, ma un nome significativo (hai già indicato perché).

Inoltre, vorrei creare una superclasse e fare in modo che questi due validatori discendano da essa, una tassonomia del validatore viene ad esistere.

Con il passare del tempo, lavorerei per sostituire i vecchi validatori con nuovi fino a quando il vecchio non sarà usato, quindi lo rimuoverò dal codice.

    
risposta data 18.07.2013 - 16:34
fonte
0

Se hai un limite di tempo, allora la soluzione che hai trovato sembra funzionante, anche se un po 'caotica. Sembra che tu abbia creato un debito tecnico e alla fine vorrai tornare indietro e ripulirlo.

Un'altra opzione potrebbe essere quella di creare una classe "ValidationAdapter" che gestisca la conversione dalle regole di convalida vecchio stile a nuovo stile. O potrebbe semplicemente usare entrambe le versioni internamente. Il principale vantaggio è che mantiene la tua classe principale più pulita; ma è anche una soluzione a breve termine.

Se si suppone che la nuova classe Validaton sostituisca / sostituisca quella precedente, direi che vale la pena dedicare tempo al refactoring del codice in questione per farlo funzionare. Spero che tu abbia il tuo codice sotto test; questo rende relativamente facile da gestire. Altrimenti tornerai al codice più tardi e ti darai un calcio per aver fatto un tale "casino".

La maggior parte delle lingue ha funzionalità per rendere più semplice la deprecazione del codice precedente. Farlo nel vecchio validatore potrebbe aiutarti a ripulirlo dalla base di codice e alla fine liberartene. Non sono sicuro che la migliore pratica per PHP sia fuori mano, ma ho trovato questa domanda di overflow dello stack .

    
risposta data 18.07.2013 - 17:28
fonte
0

La soluzione migliore è mettere i test unitari su tutte le tue classi e mantenere tutti i progetti, anche quelli vecchi, aggiornati.

Se lo sforzo di mantenere aggiornato un progetto supera il valore di quel progetto, uccidilo.

Tieni presente che sarai sempre sotto pressione per non continuare a tenere le cose aggiornate. Ma questo costa di più a lungo termine - molto di più.

    
risposta data 18.07.2013 - 17:29
fonte

Leggi altre domande sui tag