Con le tradizionali app Web Java / Spring, ho storicamente utilizzato un'architettura JEE in cui sono presenti un livello di dominio e un livello Web. Il livello web contiene principalmente controller web. Il livello di dominio include entità, oggetti di accesso ai dati (o "repository" nel linguaggio Spring Data) e servizi transazionali.
Ultimamente ho creato più app che incorporano servizi Web esterni: a volte come origini dati, talvolta come provider di alcuni servizi di cui la mia app ha bisogno.
Attualmente incorporo questi servizi web invocandoli dal livello di servizio. In questo modo i web controller non devono gestirli. (Mi piace trattare i web controller come adattatori sottili tra servizi di dominio e HTTP.)
Mi chiedo tuttavia se ci sono approcci migliori.
Mi piace l'idea di mantenere il livello di servizio responsabile della gestione delle risorse interne dell'app, al contrario di incorporare anche risorse esterne. Qui forse potrei gestire l'integrazione di risorse interne ed esterne "al di sopra" del livello di servizio (ma al di sotto del livello web).
In alternativa, oppure utilizzare il livello di servizio per gestire i problemi di integrazione, ma separare le risorse strettamente interne dagli altri. Considera fondamentalmente la distinzione interna / esterna come un dettaglio di implementazione che nascondiamo dietro l'interfaccia di servizio.
Sono sicuro che ci sono anche altri approcci. Interessato a conoscerli e pro / contro associati.