Mi trovo di fronte a classi simili A1, A2, ..., A100. Che ci crediate o no ma sì, ci sono circa cento classi che sembrano quasi uguali. Nessuna di queste classi è testata da unità (ovviamente ;-)). Ciascuna di queste classi è composta da circa 50 righe di codice che non è troppo di per sé. Ancora questo è troppo codice duplicato.
Considero le seguenti opzioni:
- Scrittura dei test per A1, ..., A100. Quindi refactoring creando un
abstract base class AA.
Pro : Sono (quasi totalmente) al sicuro dai test che nulla va storto.
Con : Molto sforzo. Duplicazione del codice di prova. - Scrittura di test per A1, A2. Riassunto del codice test duplicato e utilizzo dell'astrazione per creare il resto dei test. Quindi crea AA come in 1.
Pro : meno sforzo rispetto a 1 ma mantenendo un livello di sicurezza simile.
Con : trovo strano il codice di test generalizzato ; sembra spesso ... incoerente (è questa la parola giusta?). Normalmente preferisco un codice di prova specializzato per classi specializzate. Ma ciò richiede un buon design che è il mio obiettivo di tutto questo refactoring. - Scrivi AA per primo, testandolo con lezioni di simulazione. Quindi ereditando A1, ..., A100 in successione.
Pro : il modo più veloce per eliminare i duplicati.
Con : la maggior parte delle classi di Ax sembra molto simile. Ma se no, c'è il pericolo di cambiare il codice ereditando da AA. - Altre opzioni ...
All'inizio andai per 3. perché le classi di Ax erano davvero molto simili tra loro. Ma ora sono un po 'insicuro se questo è il modo giusto (da una unità che testa la prospettiva degli appassionati).