¿Tres capas?

Lo primero que quiero decir es que la idea de escribir este texto surgió de un conversación con un desarrollador de entornos web que programa en C# (sharp). También diré que las ideas que trataré de exponer no son propias, a parte de que deben estar en muchos libros, a mi me lo explico un buen amigo.

El caso es que dicho desarrollador me enseñaba con orgullo las cosas que hacía, lo bonitas que le quedaban y la magnífica herramienta de desarrollo de que disponía.

Bien Yo, que no soy desarrollador de páginas web y que me dedico a los entornos empotrados probablemente sea el menos indicado para hablar de este tema, pero para esto está la web, para decir lo que quieras y en este caso sin ser un experto, tampoco creo que vaya a decir algo sin sentido.

Dicho programador me enseñaba como loco lo fácil que era crear una aplicación y lo mucho que le ayudaba la herramienta, y la verdad es que tenía razón, una vez que aprendes a manejar la herramienta, cosa que no parecia inmediata realmete parecia todo muy fácil.

Cuando me enseñaba el código que se generaba me di cuenta que se mezclaba la capa de presentación con la capa de negocio, vamos para entendernos bien, el html y la algoritmia de todo tipo se mezclaba.

Traté de hacerle entender que hacer las cosas así no erá una buena dinámica, pero en seguida me di cuenta de que recibía frases prepotentes del tipo, tu dedicaté a tu mi..da de C que yo he estudiado para esto y sobre todo, me dedico a esto. Lo cual me lleva a pensar que no le enseñaron bien, o que no es un buen profesional o que yo mejor me dedique a mi mi..da de C.

Después de una dura lucha al final lo único que pareció hacerle pensar un poco es que si habóa que cambiar la forma de la página desde el punto de vista de presentación de la interfaz, se podría hacer si todo estuviera bien separado sin compilar código y sin que el desarrollador estuviera presente. Por ejemplo lo podría cambiar un diseñador gráfico sin ayuda de ningún tipo. Pero fué sólo un espejismo,pensar debió pensar pero al final decidió que no le interesaba lo que le contaba.

Yo creo que podría haber mostrado más interes, la gente cree que lo sabe todo y es mejor ser más humilde y tratar de aprender de las buenas ideas, no porque sean mias, es que además están en los libros.

En resumen, no le convencí y yo me sigo dedicando a mi m...a de C.

Bueno voy a contar como hago últimamente las aplicaciones que necesitan una interfaz de usuario. Simplemente es algo que me sirve a mi, y no tiene porque gustarle a nadie más, pero me parece útil y sobre todo extremadamente sencillo ya que en general la parte de la interfaz gráfica suele ser tediosa y complicada, sobre todo en lo que se refiere al manejo de eventos.

Lo que hago es hacerlo todo en un entorno web. Me da igual si se va a ejecutar en local, me simplifica muchísimo el trabajo y dependiendo del nivel que se tenga en entornos web puede quedar aplicaciones muy vistosas. Dejo claro que NO es mi caso. Es decir creo las interfaces necesarias con html y algo de javascrip si es imprescindible. La parte inteligente en C o C++.

Esté método tiene ciertas ventajas, que creo son importantísimas, y supongo que también tiene desventajas, quizás una de ellas es que puedan ser un poco más lentas, y que se necesita un servidor http.

Por supuesto si quieres hacer un juego con gráficos o cosas así este no es el método adecuado, pero sí para realizar las típicas aplicaciones con formularios para rellenar.

Las ventajas claras son:

  1. Tu aplicación de un plumazo se convieten en distribuidas. Cualquier persona puede acceder a ellas desde donde quiera, en forma local, red privada, o incluso internet.
  1. Es ideal para aplicacione donde varias personas tengan que utilizar la misma aplicacion. Pones en un servidor tu aplicación y todo el mundo la ejecuta desde donde quiera y a la vez.
  1. Yo diría que casi cualquiera sabe algo de html, y si no se puede utilizar un editor de html de los de arratrar y soltar. Un libro de javascrips para alguna cosa un poco más complicada y listo.
  1. Si lo haces bien tienes separada totalmente la capa presentación, la lógica y la capa de persistencia o administración de datos.

Mi forma de trabajar es, creo la página html a mano o con un editor. Donde quiero colocar información que se consigue con la parte lógica del programa pongo un tag del tipo info1, info2 ... de tal forma que antes de servir la página se parsea y se cambia los tags por la información deseada.

Es decir, aunque la página html tiene entidad propia, no la sirvo directamente desde el servidor, la sirve la capa de negocio que lee del disco el fichero con la información html y la presenta. Antes de presentarla la parsea por si tiene que cambiar algo.

Es decir, la única interación entre las capas o nexo de unión son esos pequeños tags que se sustituyen en el momento de presentar la página. Una vez creado el sistema se puede cambiar el aspecto de la página si recompilar nada.

La lógica de negocio la realizo en C o C++, por lo que estoy creando un CGI. Este tipo de aplicaciones ya no se utilizan mucho porque tienen ciertas desventajas con respecto a, por ejemplo, un servlet o una JSP. De entrada son más peligrosas con los recursos, OJO, ya que si no programas bien puedes tirar un servidor, pero como son mis aplicaciones y me fío de mi mismo, lo hago así, por comodidad ya que son los lenguajes que manejo a diario.

Otro inconveniente es la forma en que el servidor replica la aplicación en memoria cuando hay varios usuarios utilizándola a la vez, siendo menos eficiente en el caso de los CGI ya que lanzan tantas aplicaciones como usuarios la utilicen, tal cosa se solventa de forma más ligera, mediante hilos en otro tipo de aplicaciones como las servlets. Pero vuelvo a lo mismo, en general sólo yo utilizo las aplicaciones y en cualquier caso los PC actuales pueden soportar muchas aplicaciones en memoria sin problemas.

En resumen, un poco de html, un poco de mi...a de C básico y un apache y montas un buen chiringo.

Por cierto, como siempre digo, ¿Alguien sabe en qué está escrito el kernel de linux? SÍ, EN ESA MI..DA DE C.

Comment by chous on 2006-12-21 11:43:29

Lo que has escrito es casi un WTF1 :).

Lamentablemente los desarrolladores web están sobrevalorados. Son profesionales cuya competencia fundamental es conocer los menús del Eclipse o del Visual Studio .Net, sin cuestionarse el código que generan (en el caso de que sean conscientes). Y lo digo teniendo en cuenta que me dedico a hacer aplicaciones web :).

El caso es que es a donde se tiende: tanto la guerra de IDEs (en Java Eclipse vs IntelliJ vs NetBeans), como lenguajes de programación (a partir de Java 5 ya la fase de generación está incrustada en el propio código), tal como pasó con los editores WYSIWYG HTML, siguen empeñados en hacer al hombre más tonto (menos capaz de entender situaciones y por tanto de resolver problemas), y a la máquina más lista.

Respecto a la parte técnica de tu exposición, en mi opinión lo más cercano a una separación exhaustiva y rigurosa entre la capa de presentación y las demás es lo que propone StringTemplate. Ni JSP, ni JSF. Pero claro, es menos user-friendly y por tanto no tiene éxito.

Al final uno se ve obligado a tomar una decisión: ser mejor haciendo lo que hace o que lo que uno hace le dé menos trabajo.

Comments

No comments.