java aggiunge nuovi moduli a un'app esistente

1

Ho una build di app con JSF2.x Spring IoC, transazioni e JPA su Hibernate. Questa è un'app call center completamente funzionale.

La sfida è che ora voglio aggiungere alcune funzionalità HR in cui il team delle risorse umane svolgerà varie attività. Il mio pensiero iniziale era di creare questo come un modulo per poterlo distribuire / annullare in modo indipendente dall'app madre. La comunicazione tra l'app principale e il modulo HR verrà implementata tramite REST / SOAP WS o qualsiasi altra tecnologia di comunicazione asincrona (JMS).

Con questo nella mia mente vedo già un problema: la replica del database. Perché il modulo HR funzionerà con oggetti profilo utente o utente dalla mia app principale. Quindi in questo scenario invierei questi oggetti al modulo HR e probabilmente lì avrei un database locale dove queste informazioni saranno duplicate e difficili da mantenere sincronizzate.

L'altro approccio sarebbe avere 2 app che condividono lo stesso database, e suppongo che ciò eliminerà la necessità di un livello di comunicazione (WS / JMS ...), perché entrambe le app leggono / scrivono nello stesso database . ma come previsto, questo ha anche alcuni inconvenienti:

  • l'esecuzione di operazioni dal modulo HR a un'entità utente interromperà il livello di cache che viene utilizzato dall'app principale;
  • condividendo lo stesso database si presenteranno alcuni scenari in cui alcune funzionalità HR devono essere forzate ad alterare lo schema DB e a ridistribuire l'app principale.

Come devo procedere per ottenere un alto livello di indipendenza tra l'app principale e vari moduli e senza replicare alcuni dati per ciascun modulo?

    
posta Videanu Adrian 06.01.2015 - 10:03
fonte

1 risposta

1

Determina un master responsabile per ogni parte di dati

Sembra molto strano che entrambe le applicazioni debbano cambiare gli stessi dati. Invece, puoi dividere i dati tra le due applicazioni in modo che solo una delle applicazioni abbia la responsabilità di cambiare un dato specifico? Ad esempio, l'applicazione del call center stessa può gestire le modifiche alle informazioni di contatto per un cliente (telefono, e-mail) poiché le gestiscono direttamente. L'applicazione HR potrebbe essere responsabile di tutte le modifiche ai dati finanziari per il cliente (in quale percentuale scendono dal totale per l'ordine).

Evita di leggere il rispettivo database

La lettura di due applicazioni su un singolo database crea un grande mal di testa. Gli aggiornamenti dell'applicazione diventano più difficili perché hanno un impatto su entrambe le applicazioni, il test coinvolge entrambe le applicazioni e devi mantenere lo sviluppo sincronizzato per evitare di rompere le modifiche. Preferisci invece che il database appartenga a una singola applicazione che espone un contratto per accedere o esporre e, se necessario, modificare i dati. Se è possibile determinare con chiarezza chi è responsabile per quali pezzi di dati è possibile avere il master invia i propri dati allo slave. L'applicazione HR può ricevere i dati dall'applicazione del call center e tenerli di sola lettura nel proprio database, memorizzati in una struttura tabella che ha senso per l'applicazione HR.

Determina la qualità dei tuoi dati

Entrambe le applicazioni hanno bisogno di accedere ai dati in tempo reale? Supponiamo che l'app per le risorse umane aggiorni un refuso nel nome della società per cui lavora il cliente, quanto sarebbe male avere queste informazioni solo il giorno successivo? Questo determinerà la tua strategia di accesso ai dati. Se è necessario essere in tempo reale, utilizzare un servizio Web per l'accesso ai dati o inviare messaggi tra le applicazioni per modificare i dati in tempo reale. Se i dati possono essere più vecchi, è possibile utilizzare un'attività programmata per sincronizzare i dati, ad esempio una volta la notte. Più si accoppiano le applicazioni (tramite servizi Web o database condivisi), più diventano dipendenti. Se l'app per le risorse umane e il call center utilizza i servizi Web, l'interruzione di una delle applicazioni (per gli aggiornamenti o a causa di un arresto anomalo) porta effettivamente giù. La sincronizzazione dei dati archiviati nei propri database evita di avere questo tipo di interdipendenza. Se hai bisogno di questo tipo di affidabilità è un'altra domanda.

    
risposta data 06.01.2015 - 10:33
fonte

Leggi altre domande sui tag