Sto creando un plug-in che utilizza una metrica per determinare un punteggio su una pagina e consente all'utente di fare clic per visualizzare una suddivisione più dettagliata del punteggio in una pagina separata.
Il problema è: non riesco a decidere se è meglio ri-implementare la logica utilizzata per derivare il punteggio iniziale quando si genera il guasto. Da un lato, la stessa logica dovrebbe essere utilizzata in entrambi i casi. Il punteggio dovrebbe essere lo stesso; il codice di interruzione dovrebbe solo eseguire alcune query aggiuntive per fornire maggiori dettagli su ciò che costituisce il punteggio.
Ri-implementare (ciò che dovrebbe essere) la stessa logica usando nuovi metodi potrebbe eseguire la legge di Segal: "Un uomo con un orologio sa che ore sono: un uomo con due orologi non è mai sicuro". Se qualcosa cambia su come viene calcolata la metrica, i due punteggi (quello mostrato inizialmente e quello nella ripartizione) potrebbero divergere - almeno la logica dovrebbe essere aggiornata in entrambi i punti.
D'altra parte, sembra più pulito avere metodi che hanno un unico scopo (o il minimo possibile). Passare attraverso gli stessi metodi significa usare un flag per determinare se stiamo generando il punteggio semplice o la ripartizione. Regolando il comportamento dei metodi in questo modo, a seconda del flag, rende il codice più complesso, più difficile da vedere lo scopo e più difficile da mantenere. Il punteggio calcolato dovrebbe essere lo stesso. Se non lo è, allora ciò indica un errore nella logica. Una soluzione sarebbe quella di creare nuovi metodi per calcolare la scomposizione e quindi creare alcuni test unitari per verificare che i punteggi corrispondano. Ciò fornisce l'ulteriore vantaggio di rivelare i difetti che altrimenti sarebbero nascosti (un uomo con due orologi è più probabile che sappia quando un dispositivo che indica il tempo è inaffidabile).
Non sto davvero chiedendo una risposta nel mio caso specifico in quanto sono sicuro che dipenderà dai dettagli (quanto lavoro extra è stato fatto nella scomposizione e così via). La domanda è: cosa devo considerare quando si decide come riutilizzare la logica dell'applicazione in una situazione come questa?