Sto usando symfony 2
e ho una domanda sulla separazione del codice. Mi piacerebbe essere sicuro di capire correttamente quali elementi dovrebbero essere presenti in un controller, cosa in un servizio e cosa in un'entità.Separazione del codice in symfony 2 - Controller vs Service vs entity
Immaginiamo di avere un elenco di documenti che devo visualizzare. Su ciascun documento prima della visualizzazione, devo anche eseguire alcune operazioni logiche (ad esempio aggiungere due variabili).
Come nel comprendere la classe di entità si occupa solo del recupero dei dati e del funzionamento su singola entità. Non dovrei inserire alcun codice personalizzato. Come ho capito, questo dovrebbe essere fatto da un servizio.
Ma devo:
- utilizzare un servizio per passare al controller elenco dei documenti sulla base di alcuni
criteri dopo aver eseguito la logica necessaria, - o utilizzare un controller per scaricare l'elenco dei documenti, e di passare il documento al servizio per eseguire qualche logica?
Preferisco pensare che il primo approccio sia appropriato per mantenere il controller sottile (controller sottili, modelli grandi) ma questo approccio è giusto? Quale codice deve essere nell'entità, cosa nel controller e cosa in un servizio?
In particolare, dove dovrei relazionarmi con il gestore di entità - in un controller o piuttosto in servizio?
Supponiamo inoltre che in molti punti della mia app sia necessario verificare se il documento è stato finalizzato prima di consentire all'utente di eseguire qualsiasi azione (ad esempio modificarlo). Questo sicuramente dovrebbe essere o in un servizio, in quanto sarebbe necessario un altro servizio per controllarlo. Dovrei comunque caricare l'oggetto entità documento nel controller, inviarlo al servizio per verificare se può essere finalizzato o piuttosto caricare il documento in servizio e eseguire un controllo?
La filosofia di Symfony2 è: controller sottili, servizi grassi. Si fa riferimento a Entity Manager nella classe Repository entità. Se si desidera modificare i dati con un servizio, si passa al servizio di repository. –
Quindi, principalmente per ciascuna entità, dovrei creare un servizio ("classe repository di entità") per gestire tutte le richieste. Sto comprendendo questo correttamente? – Abdel5