Bene, permettimi di far luce sulla domanda ambigua. Abbiamo un'applicazione di analisi scritta in Angular 2 e Scala utilizzata da un numero piuttosto elevato di aziende. Qualche volta l'anno scorso c'è stata l'idea di utilizzare i grafici e le caratteristiche delle app per visualizzare diversi tipi di dati per un numero molto limitato di clienti a un prezzo più alto. Poiché il tempo era essenziale, abbiamo ottimizzato il codice di front-end, astratto il numero di visualizzazioni e ha funzionato come un incantesimo. Una base di codice Angular 2 alimenta due soluzioni.
Pochi mesi dopo sono iniziati i problemi. Dal momento che i clienti aziendali della seconda soluzione pagano un sacco di soldi e la soluzione deve essere leggermente adattata a quasi tutti, hanno iniziato a chiedere funzionalità diverse, componenti aggiuntivi personalizzati ecc. L'app inizia a trasformarsi in uno strano behemoth dove L'80% del codice è di vecchia analisi e il 20% è personalizzato se-controlla per determinare quale degli utenti della seconda soluzione è e come dovremmo cambiare il comportamento del componente per lui.
La seconda soluzione è stata sviluppata molto rapidamente come prova di concetto / hack. Mi sono offerto di dividere il codice base, perché quello attuale sta rallentando lo sviluppo della piattaforma di analisi di base e occasionalmente è una fonte di bug. L'argomentazione contro di essa è che l'azienda vuole continuare ad aggiungere funzionalità alla soluzione successiva, così vogliono rimanere in una base di codice.
Un'altra opzione è quella di dividere la base di codice e di astrarre tutti i componenti comuni in un modulo che viene poi iniettato in due app, ma è molto lavoro e il lavoro sulla piattaforma di analisi ne risentirà. Inoltre, poiché le caratteristiche del prodotto tendono a cambiare molto a causa del nuovo terreno in cui stiamo entrando, dovremmo continuare a cambiare i moduli astratti di tanto in tanto, il che richiederebbe quindi di assicurarsi che funzionino ancora in entrambe le applicazioni, quindi gli sviluppatori lavorare sull'analisi sarebbe ancora rallentato dal requisito di mantenere la compatibilità con la seconda soluzione.
Il front-end di entrambe le soluzioni sembra molto simile ma serve a scopi simili, sebbene diversi. Non sembra giusto averli in 1 base di codice inquinato.
Quali sono i tuoi pensieri al riguardo? Quali altre soluzioni possiamo implementare?