Hola,
Soy novato en Symfony y me encuentro con el siguiente problema: en mi lógica de negocio surge un objeto que no es una entidad (no tiene relación directa con ninguna tabla de la base de datos, sino que toma sus valores en base a varias entidades y cálculos).
La cuestión es que no sé dónde debo ubicar la definición de esta clase, si en el directorio Entity/
junto con las entidades, en otro directorio con un nombre a mi elección (Class/
por ejemplo), o bien no es correcto tener definir una clase que almacene datos y no sea una entidad. No sé si hay algún convenio establecido al respecto.
En cualquier caso os agradecería que me echéis una mano con la decisión.
Un saludo.
Respuestas
Almacenar las entidades de Doctrine en el directorio Entity/
es una buena práctica muy extendida, por lo que no te aconsejo que mezcles en ese directorio otras cosas.
Lo bueno de los bundles de Symfony2 es que son totalmente flexibles, así que puedes inventarte cualquier estructura de directorios que te parezca lógica y se adapte bien a tu proyecto. Una práctica habitual es utilizar el directorio Model/
, para almacenar todo lo relacionado con la lógica de negocio de la aplicación. Además, también se utiliza mucho el directorio Manager/
para almacenar las clases que trabajan por encima de las entidades y que se encargan de manipularlas.
La aplicación de comercio electrónico Sylius es un buen ejemplo de cómo estructurar el código en una aplicación compleja. Fíjate por ejemplo en el bundle SettingsBundle y cómo usa los directorios Model/
y Manager/
.
Por último, si quieres profundizar en el concepto de los managers, no te puedes perder la charla sobre buenas prácticas en Symfony2 que impartió Fran Moreno en la última conferencia deSymfony.
@javiereguiluz
Gracias por tu respuesta Javier, ya había visto el vídeo que me comentas y, aunque me ayudó a aclarar algunos conceptos, creo que me será más útil ver el código fuente de una aplicación compleja bien diseñada.
Un saludo.
@beni0888