Pregunta filosófica en desarrollo aplic aciones web


#1

Buenas gente,

Llevo un tiempo desarrollando una aplicación en Rails y me parece
genial, poco a poco voy aprendiendo, pero le estoy dando vueltas al
código para mejorarlo.

Estaba pensando en plan crear una API de la aplicación, y así montar
despues la interficie según la API.
Pero ya no sé si es complicarme la vida o que.

¿ Vosotros que teneis más experiencia en Rails y Desarrollo Web, como
planteais los proyectos mas o menos grandes ?

Saludos
Manu


#2

On Apr 25, 2007, at 12:44 PM, manu drac wrote:

Buenas gente,

Llevo un tiempo desarrollando una aplicación en Rails y me parece
genial, poco a poco voy aprendiendo, pero le estoy dando vueltas al
código para mejorarlo.

Estaba pensando en plan crear una API de la aplicación, y así
montar despues la interficie según la API.
Pero ya no sé si es complicarme la vida o que.

Uno trabaja en la API de la capa modelo tanto como su uso lo
necesite, es raro que un modelo con “peso” en la aplicacion se quede
a nivel de la API de AR. En MVC las acciones deben saber lo menos
posible de los modelos, idealmente deberian limitarse a llamar a un
puñado de metodos de alto nivel. Eso ademas fuerza a hacer un
ejercicio de modelaje que hace que la aplicacion resulte mas pensada.

Para ello añade a los modelos los metodos que consideres, y cuando
estes escribiendo acciones ten un thread en la cabeza que cuestione
si lo que escribes deberia estar encapsulado o ya esta bien.

Como estas indicaciones son muy genericas, para poner un ejemplo
concreto de una aplicacion en la que he trabajado recientemente, me
vi escribiendo en una accion algo asi:

if current_user.contacts.include?(@user)

end

Tate! La clase User deberia encapsular como se sabe que dos usuarios
son contactos (es una aplicacion con red de contactos), deberia poder
escribir sencillamente:

if current_user.contact?(@user)

end

Asi que uno va a user.rb y lo añade.

– fxn


#3

On Wednesday 25 April 2007 12:08:46 Xavier N. wrote:

escribir sencillamente:

if current_user.contact?(@user)

end

Asi que uno va a user.rb y lo añade.

Totalmente de acuerdo.

Yo añadiría que a la hora de encapsular la lógica en el modelo, es conveniente
echar un vistazo al enfoque REST+CRUD propuesto por DHH[1]. No estoy
diciendo
que cambies la arquitectura de tu aplicación, sino que consideres su punto
de
vista. Especialmente interesante es el ejemplo de los
usuarios/grupos[2].

Un saludo.

[1] http://www.loudthinking.com/arc/000593.html
[2] http://www.scribemedia.org/2006/07/09/dhh/


Imobach González Sosa
correo-e: imobachgs en banot punto net
jabber id: osoh en jabberes punto org
web: http://www.banot.net/~osoh/
blog: http://devnull.blogs.banot.net/


#4

¿ Vosotros que teneis más experiencia en Rails y Desarrollo Web, como
planteais los proyectos mas o menos grandes ?

  • Algunas veces es posible mover código del controlador al modelo. Por
    ejemplo si utilizas complejos find, creas un método find personalizado
    en tu modelo y lo llamas directamente en la vista.

  • Mover el código del controlador a un método helper y desde ahí
    renderizar (render) el partial.

  • Mover algún código común a before filter.

  • Utilizar componentes.

Cómo bien lo han apuntado mis compañeros, tener en mente re-factorizar.

Bienvenido.

Saludos.

Jaime Mora R.


#5

On Wednesday 25 April 2007 15:53:35 Sebastian D. wrote:

escribiendo… dejalo para despues (pero no mucho despues) cuando
tengas una imagen mas clara de que es lo que querias que hiciera tu
codigo.

Efectivamente. Y recuerda: “La optimización prematura es la raíz de todos los
males” (Donald Knuth).

Saludos.


#6

Y por lo general, no le tengas miedo a ir refactorizando poco a poco…

Es muy probable que escribas algunas acciones bastante complejas, o
incluso que pongas algo de logica dentro de tus vistas. Pero al final
del dia, es buena idea que te alejes un poco del monitor, veas el
codigo desde una perspectiva un poco mas general y lo limpies un
poco… moviendo funciones del controlador al modelo, pasando logica
de la vista a helpers o a la accion, etc, etc.

No te preocupes mucho sobre donde debe ir cada cosa mientras las vas
escribiendo… dejalo para despues (pero no mucho despues) cuando
tengas una imagen mas clara de que es lo que querias que hiciera tu
codigo.