Este tema me da vueltas en la cabeza hace mucho tiempo. Desde que estoy metido en esta industria, veo cada vez más aplicaciones empresariales desarrolladas sobre plataformas web. ASP, PHP, etc. Y la verdad es que nunca logré entender por qué. En general suelo escuchar dos argumentos a favor:

  • Es la correcta implentación de las tres capas (del lado del cliente solo existe la interfase gráfica, dejando en el server la capa de necgocios y la de datos)
  • Facilidad de implementación (lo instalas en un servidor web y listo. Todo el mundo lo accesa desde ahí)

Bueno. Voy a pasar a refutar esos argumentos.

Una implementación de tres capas se puede hacer perfectamente bien en una aplicación de escritorio. No hay nada que lo evite. Se puede mantener del lado del cliente la interfase de usuario y llamar a métodos de servidor. Para la lógica de negocios. Incluso haciendo uso de web services esto es más que simple.

Este error de concepto del que las aplicaciones escritorios no implementan 3 capas viene de la época en que nadie lo hacía. todas las aplicaciones accesaban directamente a la base de datos desde el cliente y toda la lógica de negocios se ejecutaba en el cliente mismo. Pero el hecho de que durante años se hayan hecho mal las cosas no implica que no se puedan hacer bien. De hecho, hoy se siguen haciendo mal a pesar de estar implementadas sobre web, o sino no conoceríamos terminos como "SQL injection".

En cuanto a la facilidad de implementación, bueno, si es cierto. Es mucho más facil para el implementador instalar la aplicación en el servidor, configurar un par de cosas y olvidarse de todo. Pero en definitiva… ¿Para quién es la aplicación? ¿Para el implementador? ¡No! ¡Es para el usuario! En el usuario es en el hay que pensar. ¿Y qué le molesta al usuario de usar una aplicación web?… Veamos.

La aplicaciones web son LENTAS. Aún cuando usemos tecnologías nuevas como AJAX, no hay forma en que una aplicación web se aproxime al rendimiento de una aplicacion de escritorio. Simplemente porque TODA la interfase de usuario esta viajando continuamente por la red. Y si ven a un data-entry tratando de cargar 200 recibos, van a notar que molesto se pone al tener que esperar un segundo o dos mientras la página se refresca.

Las paginas web no tienen estado. Lo que implica que que siempre que hay que mandar datos al servidor, hay que mandar un montón de información sobre el estado de todos los objetos del lado del cliente. Esto llena la red de información que de otra forma se resolvería mucho más eficientemente. Y como si esto fuera poco la información de autenticación tiene que viajar todas y cada una de las veces en forma de cookies, para que el servidor se acuerde de quienes somos.

Las paginas web son todas distintas. No hay una norma que diga "un botón de cerrar luce así" o "cuando veo esta flecha significa que puedo desplegar un menú". Este es el menor de los problemas. Una persona puede aprender a usar un aplicación, y en muy poco tiempo interpreta la interfase sin siquiera pensarlo. Pero aún así es mucho menos intuitivo que una aplicación de escritorio.

Las páginas web fueron pensadas para otros usos. Toda la tecnología que usamos hoy en las aplicaciones web es un agregado. Desde los viejos días de los HTML las cosas han cambiado mucho. DHTML, Javascript, CSS, AJAX, etc. Todos ellos son tecnologías inventadas para cubrir los huecos de un protocolo que originalmente fue pensado para un objetivo completamente distinto.

Las páginas web no se actualizan. El protocolo HTTP funciona de la siguiente forma: Yo pregunto el server responde. Punto. Esto carece de algo fundamental. Las notificaciones de cambios. Si yo estoy consultando un artículo y alguien en otra terminal modifica su precio, el servidor no es capaz de informarme esto y mi página web no se actualiza hasta que yo no decida volver a cargarla. Este ejemplo es bastante simple pero complicaciones como estas las hay por todos lados. Yo recientemente tuve que crear un programa de chat dentro de una página web. Finalmente decidí hacer una rutina en javascript que pregunte una vez cada 3 segundos al servidor para ver si hay mensajes nuevos. Esto es casi un record de ineficiencia. Pocas cosas me pueden hacer doler las tripas más que verme obligado a hacer algo así.

Las páginas web tienen poco acceso a la PC. Los navegadores actuales se encargan de eso. Y está bien que lo hagan. Porque sino yo podría entrar a una página web y esta borrarme todos los archivos del disco. Pero esto también trae problemas cuando necesitamos que ese acceso. Hace puco tuve que hacer que una página web grabara la voz del usuario desde el micrófono y enviara esos datos a un server. Más allá del hecho de que tuve que construir un control ActiveX que manejara toda esta lógica del lado del cliente. También tuve que luchar mucho con los permisos de estos controles y solamente conseguí un éxito parcial. Para que la aplicación funcione es necesario otorgarle permisos especiales dentro del administrador del .NET framework que le dan acceso al hardware, para así poder leer el micrófono.

En conclusión. ¿Por qué usaríamos un martillo para atornillar un tornillo? Si hay tan lindas herramientas….

Si alguien tiene algún argumento en contra de lo que dije, por favor lo invito a poner un comentario. Quiero saber más de esta tendencia inexplicable para mí. Y sé que puedo estar muy equivocado. Así que cualquier opinión es bienvenida.

Anuncios