2011-09-21 17 views
14

Estamos creando un SaaS que supervisa ciertos activos. Esto significa que toma datos, los guarda y los muestra en una interfaz web.Cómo compartir un modelo Symfony2 con varios proyectos

Para esto, tenemos unos pocos componentes que hemos creado con/se mueven a Symfony2:

  • una aplicación de interfaz web, donde los usuarios pueden ver sus datos
  • una aplicación web de administración de back-end, donde crear nuevos monitores, usuarios, etc.
  • una API
  • una aplicación que recupera los datos recibidos de una cola y los pone en nuestra base de datos (esto es ahora un script separado, pero estoy pensando en volver a trabajar esto como Comando Symfony que es llamado por cron)

Todas estas cuatro aplicaciones comparten el mismo modelo: nuestra base de datos principal que contiene todos los usuarios, monitores y datos.

Mi pregunta es: ¿cómo debo estructurar estos proyectos en Symfony2?

  1. ¿Creé un paquete separado que contiene las entidades para mi base de datos, y los cuatro proyectos incluyen esas entidades y trabajan con ellas?
  2. ¿Puedo hacer un directorio 'modelo' en la carpeta de mi aplicación Symfony, que todos los paquetes en mi directorio/src usan?
  3. ¿Alguna otra forma más limpia de hacer esto?

La opción 1 parece un poco rara, ya que un paquete, a mi entender, necesita enrutamiento, vistas, controladores, etc. Usarlo solo para entidades sería un poco extraño.

La opción 2 parece correcta, ya que la carpeta/app se considera 'comunal' de todos modos para todo lo que está en la carpeta/src (ya que, por ejemplo, los parámetros también se encuentran allí). Sin embargo, no hay una carpeta 'modelo' allí, y no estoy seguro de que debería haber?

Entiendo que ya hay muy pocas "mejores prácticas" para Symfony 2, ya que es completamente nuevo. Pero quería ver si hay prácticas más preferibles que otras, en su opinión.

Cualquier comentario es más que bienvenido. Gracias de antemano,

Dieter

Respuesta

6

Lo que estoy haciendo actualmente es la primera opción: crear un paquete separado para sus entidades. Ahí es donde almaceno accesorios, entidades, formularios y pruebas relacionadas con entidades.

Un haz hace NO necesita tener enrutamiento, controladores, vistas, etc. De hecho, he visto un haz de planos, y lo único que hace es barco recursos plano-css con ella para que puedan ser fácilmente reutilizados en proyectos.

En cuanto a agregar modelos al directorio de la aplicación ... No me gustaría. Veo el directorio de la aplicación como un lugar donde debería estar toda la configuración. Aunque puede anular las vistas en app/Resources, cada vez que deseo sobrescribir algo, creo un paquete nuevo.

+0

Eso es lo que necesitaba saber :) ¡Gracias! – Dieter

1

No he usado esta técnica yo mismo en una aplicación Symfony2 del mundo real, pero es un puntero ya que me ha pedido algún comentario.

El service container parece ser el método Smyfony2 para hacer que los servicios estén disponibles globalmente. Entonces, en su caso, los objetos de acceso modelo se definirán como servicios, tal como se explica en el enlace proporcionado, y luego se pueden usar desde cualquier paquete.

¿Ahora en qué paquete van los objetos de servicio? Podemos ponerlos en un paquete separado ya que se comparten entre otros paquetes. Sin embargo, supongo que el modelo no sería perfectamente simétrico para todos los paquetes, por lo que podemos poner el modelo compartido en un paquete separado, y agrupar las entidades específicas en el paquete mismo. Luego, las técnicas de inyección discutidas en el enlace anterior se pueden usar para proporcionar un modelo completo específico para cada paquete.

Esto parece proporcionar un desacoplamiento máximo.

Estoy interesado en cualquier comentario sobre esto también, ya que es un escenario de diseño común.

Atentamente.

+0

Hola m8, gracias por los comentarios. Para mi caso particular, el repositorio personalizado era lo que necesitaba, y los puse en un ModelBundle 'compartido'. Las entidades y las pruebas de la entidad y tal también van allí. Sin embargo, estoy creando un servicio que tendrá que ser compartido, pero eso no tiene nada que ver con mi modelo (es enviar un SMS, en un caso). Aún no estoy seguro de cómo estructurar eso, pero estoy pensando en la misma línea que tú. Estoy bastante seguro de que los incluiré en un paquete separado, donde irán todos los servicios que podrían compartirse. ¿No estoy seguro de si este es el camino a seguir? – Dieter

Cuestiones relacionadas