Qualunque cosa tu faccia mantenere il livello Dominio puro, senza alcuna dipendenza da altri livelli.
In Application Bundle, I have application, domain and infrastructure (tiers?), where application has the public API (presentation layer).
Il livello applicazione non è il livello presentazione .
Il Application layer
espone i casi d'uso del tuo dominio. È uno strato sottile, senza regole di business. In generale c'è solo un livello di questo tipo. In questo livello è molto probabile che i servizi applicativi (classi) facciano sostanzialmente questo: carica una Aggregate
radice da Repository
, chiama un metodo su di esso e quindi persiste le modifiche a Repository
. Certo, potrebbe avere altre responsabilità come l'autorizzazione: ad esempio qui controlli che se l'utente è un admin
può cancellare qualsiasi Product
.
Il Presentation layer
è il client di Application layer
. Potrebbe esserci più di un Presentation layer
che utilizza Application layer
. La responsabilità principale di questo livello è raccogliere l'input dell'utente e chiamare Application services
- i servizi che vivono in Application layer
. Un'altra responsabilità è quella di visualizzare i dati all'utente. Esempi di Presentation layers
: un livello di presentazione MVC, un endpoint REST.
Since I will have application, domain and infrastructure services, I thought about making an application service for each domain service I need
Dovresti creare un servizio applicativo per ogni caso d'uso, non per ogni servizio di dominio. Una nota sui servizi di dominio: ricorda il modello di dominio anemico .
Informazioni sui tipi di utilizzo del livello Applicazione: se si ospita Presentation layer
e Application layer
sullo stesso server, ad esempio se si dispone di MCV
sopra Application layer
, allora è possibile chiama Application services
direttamente dal tuo Controller
, come le normali chiamate di metodo. Se si separa il frontend dal backend, non è possibile chiamare direttamente i servizi dell'applicazione ma è possibile utilizzare un endpoint REST
sopra Application layer
.
Now, I need to access an API from the WebUiBundle, but not the public API for first-rendering, I want to make it internal.
Application layer
è sempre interno. Ha bisogno di un Presentation layer
per renderlo accessibile.