2010/8/17 Instr. Dwayne Macgowan <[email protected]>
>
> Las opciones que se me ocurren son:
> - Hago 2 aplicaciones que accedan a la misma base de datos.
> - Hago 2 aplicaciones que se comuniquen via API. ( pero pierdo todo los
> has_many )
> - mantengo todo en la misma app y a freir churros.
>

Tener 2 aplicaciones implica ciertos problemas que solo se justifica, según
mi punto de vista, en pocos casos (desde Single Sign On hasta tener en
cuenta que nunca podés considerar que un WS estará "acotado" en tiempo, por
lo que empezás a necesitar replicar y sincronizar datos o pasar a background
/ delayed job tareas que deberían ser simples). Lo justificaría si las dos
apps realmente fuesen independientes, teniendo apenas algún punto de
contacto (con la posibilidad de que evolucionen por separado), o estén
hechas en dos tecnologías diferentes (o desarrollada por equipos de
desarrollo diferentes). O sea, lo evitaría.

Una solución que a mi me gustó (aunque tiene su costo) es utilizar Engines.
O sea, plugins que contienen Models y Controllers y lo que necesiten. Esto
te permite explicitar dependencias que a veces en una app grande se te van
de mambo y mantener cada "módulo" con cierta autonomía (y ciertamente es
mucho más fácil de aprender una app si abrís el directorio de Models y hay
una cantidad manejable de archivos).

De esta manera se comportan como parte de la app y son más manejables. Algo
interesante que podés hacer es por ejemplo que la app no dependa de los
plugins sino que los plugins en su init se registren y agreguen entradas de
menú y cosas así.

El gran "pero" de este approach tiene que ver con el reloading que Rails
intenta hacer en development. Desconozco exactamente qué lo dispara (a veces
era un plugin con controllers, pero me pasó en otros casos también), cuando
intenta eliminar alguna clase para luego recargarla (por ej me pasaba con
ActionController::Base) queda alguna referencia dando vueltas por algún lado
y no la puede terminar de descargar; luego al querer redefinir esa clase
levanta un error diciendo que la clase XXX ya existe o algo similar. La
única solución que encontré es desactivar el class reloading en development
(lo que es muy molesto).

nachokb
_______________________________________________
Ruby mailing list
[email protected]
http://lista.rubyargentina.com.ar/listinfo.cgi/ruby-rubyargentina.com.ar

Responder a