Symfony2: organizar de los bundles de un proyecto

Posted by victor on March 21st, 2013
symfony2-logoLos bundles son un concepto nuevo que aparece con Symfony2 y son una parte muy importante de la filosofía Symfony. Symfony no es solo un framework, que nos facilita las tareas rutinarias, sino que también es una forma de trabajar. Siguiendo su metodología ahorraremos tiempo en implementar un proyecto. Los bundles son divisiones lógicas de un proyecto. Se organizan en carpetas con una estructura conocida. Aunque podríamos elegir otra, no sería lo mas conveniente si queremos aprovechar todas las facilidades del framework. Antes de crear un nuevo proyecto hay que realizar una buena planificación por lo que tendríamos que tener claras las entidades del modelo de datos, los bundles en los que se dividirá y las rutas que lo conforman. Con respecto a los bundles, inicialmente es complejo realizar una separación y más cuando puedes tener partes del proyecto dudosas pero por las experiencia acumulada hay algunos bundles que se repiten y esos son los que voy a describir. Por supuesto, esto es meramente orientativo y al final, cada programador toma sus decisiones.

Estructura base

bundles-symfony2 CommonBundle: es un bundle transversal. Contiene lógica que podría ser usada por cualquier otro bundle. Cosas como utilidades o las plantillas Twig generales se pueden albergar en el perfectamente. Además, este bundle puede recibir aquellas características que no encajen en ningún otro. UserBundle: alberga todo lo referente al usuario: página de login, alta de nuevos usuarios, dashboard etc... StaticBundle: almacena contenido estático. Simplemente son vistas que cargaremos directamente sin crear un controlador específico ya que lo hace por nosotros Symfony mediante el FrameworkBundle. ApiBundle: si el proyecto publica una API, este bundle almacena todos sus controladores y rutas. La API exponen parte o toda la funcionalidad del proyecto al exterior para que terceros puedan integrarla en sus servicios lo que, sin duda, reportará beneficios al proyecto. BackendBundle: Todo lo relacionado con la administración del proyecto. Normalmente, el acceso al Backend está restringido a usuarios administradores. Por ejemplo. si el proyecto está relacionado con el e-commerce, desde el backend se crearán ofertas, alta de productos etc...  

ApiBundle

Las APIs de un proyecto tiene especial importancia y requiere de organizar bien el código. Por lo general, la lógica de negocio es compartida entre los accesos desde la web y los de la API. Ello obliga a implementar la menor lógica posible en los controladores y trasladarla a clases. Mediante el Inyector de dependencias, tendremos todo lo necesario para llevar a cabo cualquier tarea. Es probable que algunos/todos de los métodos expuestos requieran autenticación/autorización por lo que es recomendable usar protocolos como OAuthFOSOAuthServerBundle permite implementar un servidor OAuth 2.0 que cualquier cliente OAuth puede consumir, incluidos los dispositivos móviles. Android implementa soporte de serie para este protocolo. En iPhone, mediante librerías externas). Por último, una API requiere buena documentación, por lo que NelmioApiDocBundle es genial para este propósito.

Comments

comments powered by Disqus