Gestisco un sito di e-commerce costruito in Java utilizzando Spring e Hibernate. Se devo descrivere brevemente l'architettura corrente, è come questo:
- Sto avendo due progetti per nome - store front e admin
 - Il progetto Storefront contiene DAO, modello, servizio, controller e visualizzazioni per mostrare la vista di storefront del sito Web e contenere anche le API per le app. In un perfetto livello di architettura MVC.
 - Il progetto Amministratore contiene DAO, modello, servizio, controller e viste per mostrare le interfacce backend / admin per la gestione di questo negozio di e-commerce. È anche un'architettura MVC perfetta.
 -  
Storefront e admin possono essere compilati e distribuiti indipendentemente.
 -  
Storefront fa un uso pesante della cache estraendo la maggior parte dei dati del catalogo nella memoria.
 - Entrambi i progetti parlano indipendentemente con lo stesso database MySQL per tutte le operazioni CRUD.
 - Ogni volta che viene richiesta una comunicazione tra questi due progetti, lo fanno usando le API REST.
 - Ho seguito questa architettura per sviluppare entrambi i progetti in modo indipendente, tenerli leggeri e implementarli in modo indipendente.
 
Tutto sta andando bene, ma molte volte ho la sensazione che potrebbe non essere l'approccio corretto per risolvere il mio problema. I problemi che affronto frequentemente sono:
- Causa la duplicazione del codice, soprattutto in Modelli, poiché è qualcosa che entrambi i progetti hanno ma la maggior parte delle proprietà in essi sono comuni.
 -  
Insieme ai modelli, la duplicazione di codice avviene anche nel servizio e DAO, non è molto, ma possiamo supporre che almeno il 30% sia duplicato anche in essi.
 -  
Se sono necessarie modifiche nel database, allora devo assicurarmi che tali modifiche siano state fatte correttamente in entrambi i progetti poiché entrambi stanno effettuando chiamate DB indipendenti.
 
Si prega di suggerire quale potrebbe essere l'approccio migliore per gestire e architettare tale progetto.
Questo progetto e il sito web non sono abbastanza piccoli. Se devo darti un'idea, le seguenti sono statistiche:
- Circa 1 milione di prodotti
 - Traffico mensile di circa 1 milione
 - Ordini giornalieri intorno a 1000
 - Entrambi i progetti costituiscono circa 1000 file di classe e oltre 300 JSP
 - Siamo un team di soli 3 sviluppatori di stack completi.
 
Quale potrebbe essere l'approccio migliore con cui possiamo gestire questo progetto con una duplicazione del codice minima, facile da costruire e condividere tra i membri del team. E un progetto che potrebbe scalare tenendo a mente la crescita futura.

