Onion Architecture parla della separazione dell'interfaccia utente, del servizio e dei livelli di dati. Tutti i campioni solitamente forniti per questo coinvolgono un singolo modello di distribuzione dell'applicazione. Ad esempio in .net la maggior parte dei campioni sono
Web - App MVC
Core / Dominio - Libreria di classi semplice
Dati - Entity Framework
Che cosa accade se la mia applicazione ha più varianti di distribuzione? Ad esempio, risorse di Azure e SQL Server on premise. La soluzione si scompone in progetti condivisibili? Cosa succede quando parti dell'infrastruttura sono condivise?
Host - On-Premise - ha solo la classe Program.cs e Startup, collega tutte le dipendenze. Ha anche la logica per eseguire la migrazione / configurazione per l'infrastruttura
Host - Azure - come sopra
Web - Controllers, View, Models - ma la libreria di classi non è un'app
Core / Domain - Non cambia
Infrastruttura - SQL - Infrastruttura - Azure
Infrastruttura - X
Questo è il modo corretto di pensare? gli "App Hosts" dovrebbero essere il più minimali possibile e collegare tutto? Le infrastrutture devono essere separate dall'infrastruttura che stanno utilizzando o dallo stile di implementazione (On premise vs Azure)? È strano avere un livello infrastruttura che non implementa tutti i repository definiti nel livello dominio?