Sfondo: Sto costruendo un prototipo di app scientifica con le parti "Esplorazione" e "Ottimizzazione". (Altre parti potrebbero essere necessarie in seguito.) Ogni parte utilizza la programmazione reattiva funzionale (FRP) e ha una propria finestra GUI. "Ottimizzazione" dipende dalle scelte dell'utente all'interno di "Esplorazione"; non c'è dipendenza dall'altra parte Anche se il linguaggio è Scala, in futuro sarà necessario integrare con Python e possibilmente R.
In primo luogo, ho creato una "Esplorazione", solo un'app basata sull'architettura "pulita" e sui principi del DDD. (L'app è implementata come progetto sbt multi-modulo in Intellij, vedi Figura 1.) Sono contento di questa app individuale.
Figura 1: "Esplorazione" -solo progetto con i "moduli cipolla" ombreggiati. Dipendenze omesse: principale su ogni modulo; ogni modulo su Utils.
I problemi sono iniziati quando si aggiunge la parte "Ottimizzazione" allo stesso progetto Intellij. In termini DDD, "Esplorazione" e "Ottimizzazione" sono distinti contesti limitati. Combinare entrambi in un progetto richiederebbe due "cipolle" affiancate. La complessità è notevolmente maggiore rispetto al progetto "Esplorazione" - solo.
Provato: ho esaminato i microservizi, che sembrano interessanti, ad esempio, per separare contesti limitati link , ma presenta anche degli svantaggi link ; link . Dato che ho poca esperienza con loro, probabilmente sono un eccesso per questo prototipo di medie dimensioni, ma potrebbero essere utili in futuro.
La mia idea attuale è quella di dividere il progetto in quattro progetti multi-modulo separati; vedere la Figura 2. Il "Progetto principale" indipendente contiene tutti i domini di supporto e il dominio principale astratto. I progetti "Esplorazione" e "Ottimizzazione" dipendono da questo come un progetto esterno. Il progetto "Principale", dipendente dagli altri tre, collega l'intera applicazione ed è responsabile del trasferimento dei dati da "Esplorazione" a "Ottimizzazione".
Domanda: questa soluzione è ragionevole e come potrebbe essere migliorata? O c'è una soluzione migliore?
Correlati: Diverse domande SE suggeriscono l'utilizzo dei microservizi, ad es. Come si può separare un monolite nelle librerie basate su domini senza duplicare le interfacce e mantenere le dipendenze semplici? . Ci sono anche domande specifiche per la lingua, ad es. Microservizi e librerie condivise per Python.
Figura 2: Dividi in 4 progetti esterni. Le dipendenze tra progetti (linee tratteggiate) puntano verso l'alto