Doctrina ZF +: classi di modelli pesanti o modello leggero + strato di servizio?
-
27-10-2019 - |
Domanda
Sto integrando Zend Framework e Dottrina 2, e sto scoprendo il Livello di servizio.
Ora capisco (sbaglio?) Che ho 2 architetture possibili:
- UN modello, dove le classi contengono logica di dominio, IE Proprietà + getters/setter + metodi complessi
- UN Modello leggero, dove le classi contengono proprietà + getter/setter e a Servizio livello, contenente la logica del dominio e modificando le classi modello
Quali sono i pro/contro di ciascuno?
Mi sembra strano perdere OOP mettendo la logica del dominio esterno al modello, quindi non capisco perché utilizzare un livello di servizio.
Soluzione
Cosa ti fa pensare che il tuo livello di servizio sia esterno al tuo modello? Non lo è. In effetti, è una parte centrale del tuo modello, insieme a entità, repository, ecc.
Se stai usando Doctine2, vorrai un livello di servizio. Uno dei motivi è che non vuoi che le tue entità conoscano l'EntityManager (fa male alla testabilità). Un altro è che non vuoi nemmeno che i tuoi controller guidino l'EM (non è il lavoro dei controller conoscere la persistenza).
In genere uso un'architettura in cui il livello di servizio è l'interfaccia del controller al modello. Il livello di servizio espone funzioni che operano su entità (o prendendole come parametri o restituirle o entrambi). La persistenza delle entità è nascosta dal livello di servizio. O la classe di servizio guida l'em e i repository stessi o lo delega ad qualche altro codice che il controller non saprà mai esiste.
Quindi il livello di servizio fornisce e API che i controller possono utilizzare per manipolare i dati aziendali.