Abbiamo deciso di creare applicazioni separate per l'autenticazione dell'utente e la gestione degli utenti. Il motivo è che il primo è un servizio di stile "questo deve solo funzionare e farlo immediatamente", e quest'ultimo include un componente dell'interfaccia utente molto più grande con molti requisiti e caratteristiche.
Sfortunatamente, durante il white-boarding, la prototipazione e ottenere maggiori informazioni sulle funzionalità richieste, abbiamo scoperto che devono condividere diversi tipi di informazioni. Ad esempio, entrambe le app devono sapere se un utente è bloccato o deve reimpostare la propria password.
Stiamo pensando di connettere le applicazioni allo stesso database. Abbiamo preso in considerazione l'utilizzo di servizi Web per la comunicazione, ma questo ha un costo up-front più elevato, è più complesso e avrà prestazioni peggiori (supponendo che verrà effettuata la stessa query in entrambi i casi). Dovremmo tenere sincronizzate alcune informazioni in due istanze di database, il che ovviamente non è una configurazione ottimale.
D'altra parte, la condivisione dell'istanza del database richiederebbe che gli schemi delle entità dell'ORM rimangano sincronizzati (anche se non ne usassimo uno, dovremmo comunque assicurarci che le nostre query funzionino ancora in entrambe le app ogni volta che lo schema del database è cambiato). Crea una dipendenza condivisa. Inoltre, il database diventa un single point of failure / prestazioni scadenti. Inoltre, non sono sicuro che sarebbe possibile nascondere dati irrilevanti da entrambe le app, quindi l'incapsulamento è ridotto.
Qualcuno qui ha già lavorato a questo dilemma e ha acquisito qualche intuizione? Sono sicuro che ci sono altre considerazioni qui a cui non ho ancora pensato. Non è esattamente insolito che applicazioni diverse si connettano a un database centrale.
Modifica (molto più tardi):
Il risultato di questa storia quasi due anni dopo è che abbiamo finito per unire le applicazioni in una (che per fortuna era facile perché erano entrambi solo moduli che utilizzano lo stesso framework). Il ragionamento per dividerli in due aveva senso al momento, ma in retrospettiva hanno condiviso troppe responsabilità per renderlo pratico.