È meglio avere progetti separati per Frontend e backend?

1

Gestisco un sito di e-commerce costruito in Java utilizzando Spring e Hibernate. Se devo descrivere brevemente l'architettura corrente, è come questo:

  1. Sto avendo due progetti per nome - store front e admin
  2. 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.
  3. 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.
  4. Storefront e admin possono essere compilati e distribuiti indipendentemente.

  5. Storefront fa un uso pesante della cache estraendo la maggior parte dei dati del catalogo nella memoria.

  6. Entrambi i progetti parlano indipendentemente con lo stesso database MySQL per tutte le operazioni CRUD.
  7. Ogni volta che viene richiesta una comunicazione tra questi due progetti, lo fanno usando le API REST.
  8. 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:

  1. 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.
  2. 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.

  3. 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:

  1. Circa 1 milione di prodotti
  2. Traffico mensile di circa 1 milione
  3. Ordini giornalieri intorno a 1000
  4. Entrambi i progetti costituiscono circa 1000 file di classe e oltre 300 JSP
  5. 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.

    
posta Abhishek Sharma 14.09.2017 - 18:31
fonte

1 risposta

2

La duplicazione del codice è sicuramente un segnale che hai alcuni componenti riutilizzabili che non sono ancora stati scomposti.

Mi sembra che tu abbia una situazione simile alla seguente al momento:

Sevisualizziunsaccodicodiceduplicato,puoiprovarequalcosadipiùsimilealseguente:

ÈquindipossibilecreareunclientdiserviziWeb(adesempio,conillink o simili) di Feign e inserire gli oggetti del contratto in tale File JAR. In questo modo entrambi i sistemi comunicano con lo stesso servizio REST per le loro informazioni e riutilizzano i DTO che rappresentano il contratto. Le modifiche al database richiederebbero solo modifiche al servizio, sebbene le modifiche del contratto potrebbero richiedere modifiche in entrambe le app.

    
risposta data 14.09.2017 - 19:53
fonte