Disclaimer: This is a personal web page. Contents written here do not represent the position of my employer.
Sunday, October 02, 2005
Inconvenientes de ASP.NET
Es extraño que a una persona que le guste .NET le atraiga también el software libre, y viceversa. Es lo que les ocurre a las que personas que vemos futuro en Mono. Pero, si además le sumas a esto que, a una persona como yo, no le termina de gustar ASP.NET (la cual es la tecnología por excelencia dentro de .NET para desarrollar aplicaciones web), pues para de contar.
Y es que a ASP.NET le veo inconvenientes técnicos que no se pueden solventar de un día para otro, pues son problemas que influyen de raíz en la concepción de esta tecnología. Ésta aporta un modo de desarrollo por el cual le permite a un desarrollador olvidarse un poco de los intríngulis de la especificación HTML. Se basa en una serie de componentes a los cuales el desarrollador les adjudica características y comportamientos a sus eventos, de manera que parezca que se está desarrollando una aplicación de escritorio, pues luego cada control genera su salida HTML+CSS+JavaScript a la hora de enviarse del servidor web al cliente. Esto hace que tengamos poco control sobre las tecnologías que hay por encima de HTML, las cuales, en mi opinión, son de obligado conocimiento para cualquier desarrollador web.
Es más, no sólo oculta estas capas al programador sino que además le provoca malos hábitos. Da bastante grima ver cómo la mayoría de ejemplos existentes en páginas de documentación sobre ASP.NET (como MSDN) no separan el estilo del contenido, usando directivas de presentación (CSS) en los atributos de un control ASP.NET. Si actuamos así, luego será mucho más complicado, por poner un ejemplo, hacer que la aplicación web tenga estilos intercambiables (de manera que con cambiar los ficheros CSS se tenga un aspecto absolutamente distinto y la aplicación siga funcionando correctamente). Por el contrario, podemos usar CSS en los controles ya que podemos adjudicarles el valor de la propiedad "class" con el atributo "CssClass", pero esto en realidad no acaba de encajar bien con este modelo de desarrollo pues, al final, los especialistas en CSS, no sólo necesitarán los nombres de las clases, sino también los nombres de las etiquetas HTML usadas: algo que, en principio, está oculto debido al modelo de desarrollo intrínseco de ASP.NET.
¿Y cuál es el inconveniente de que los controles ASP.NET generen un código HTML que en principio el desarrollador no tiene por qué conocer? Pues que el desarrollador desconoce la calidad de este código generado. No sabe si tendrá JavaScript con errores, si el código cumplirá a rajatabla la especificación HTML, o incluso si cumplirá unas normas básicas de accesibilidad. Un buen ejemplo de ello es el control DataGrid de ASP.NET, que en sus primeras versiones renderizaba las cabeceras de una tabla como elementos de celda TD en lugar de TH, lo que es fundamental para aplicar un control de estilo CSS decente. Según la guía de "Cómo conseguir que un sitio web de ASP.NET sea accesible", ya existe un parche para este inconveniente, pero yo no lo he encontrado en ningún Service Pack ni he encontrado la versión en español de este mínimo HotFix.
Otro de los problemas que veo en ASP.NET tiene que ver con la extracción de datos desde la capa de presentación al modelo de datos. Si se desea un tratamiento avanzado de un dato extraído de una iteración de un componente asignado con el DataBind, deberemos utilizar funciones y código del back-end en las páginas ASPX (usando el método Eval del DataBinder), es decir, que estaremos mezclando lógica con presentación.
Es más, ASP.NET no tiene compatibilidad con XHTML y, lo que es peor, presupone el funcionamiento de JavaScript en la parte del cliente. Un usuario que tenga un navegador sin JavaScript o con JavaScript desactivado no podrá utilizar una aplicación web ASP.NET que tenga una cierta complejidad.
Aunque, todo sea dicho, y es que al parecer la versión 2.0 de ASP.NET (que viene con Visual Studio 2005), la cual aún no he tenido la oportunidad de probar, va a respetar mucho los estándares de la W3C. Sin embargo, en mi opinión, podrán arreglar pequeños problemas o pulir muy bien esta tecnología, pero al final, el concepto inicial en el que se basa, será siempre erróneo.
Un desarrollador web debe conocer bien las especificaciones XHTML, debe desenvolverse bien con JavaScript y usar CSS siempre, no de modo opcional. Por eso yo creo que el mejor modo de utilizar separación de capas de abstracción sin perder el control de la salida XHTML, es utilizar tecnologías propias de XML para la transformación de datos: XSLT. Si quieres más detalles sobre mi modelo de desarrollo web no dudes en leer mi artículo Evolución de mi arquitectura de desarrollo web (desde ASP hasta Mono, pasando por PHP y Java).
Actualización 04-NOV-2007: Hoy al visitar la Wikipedia me he encontrado con cosas que reafirman las quejas que expongo en este artículo. Cito:
ASP.NET 2.0 produces markup that passes W3C validation, but it is debatable as to whether this increases accessibility; one of the benefits of a semantic XHTML page + CSS representation. Several controls, such as the Login controls and the Wizard control, use HTML tables for layout by default. Microsoft has now gone some way to solve this problem by releasing the ASP.NET 2.0 CSS Control Adapters, a free add-on that produces compliant accessible XHTML+CSS markup. However, some controls still rely on JavaScript.
Y es que a ASP.NET le veo inconvenientes técnicos que no se pueden solventar de un día para otro, pues son problemas que influyen de raíz en la concepción de esta tecnología. Ésta aporta un modo de desarrollo por el cual le permite a un desarrollador olvidarse un poco de los intríngulis de la especificación HTML. Se basa en una serie de componentes a los cuales el desarrollador les adjudica características y comportamientos a sus eventos, de manera que parezca que se está desarrollando una aplicación de escritorio, pues luego cada control genera su salida HTML+CSS+JavaScript a la hora de enviarse del servidor web al cliente. Esto hace que tengamos poco control sobre las tecnologías que hay por encima de HTML, las cuales, en mi opinión, son de obligado conocimiento para cualquier desarrollador web.
Es más, no sólo oculta estas capas al programador sino que además le provoca malos hábitos. Da bastante grima ver cómo la mayoría de ejemplos existentes en páginas de documentación sobre ASP.NET (como MSDN) no separan el estilo del contenido, usando directivas de presentación (CSS) en los atributos de un control ASP.NET. Si actuamos así, luego será mucho más complicado, por poner un ejemplo, hacer que la aplicación web tenga estilos intercambiables (de manera que con cambiar los ficheros CSS se tenga un aspecto absolutamente distinto y la aplicación siga funcionando correctamente). Por el contrario, podemos usar CSS en los controles ya que podemos adjudicarles el valor de la propiedad "class" con el atributo "CssClass", pero esto en realidad no acaba de encajar bien con este modelo de desarrollo pues, al final, los especialistas en CSS, no sólo necesitarán los nombres de las clases, sino también los nombres de las etiquetas HTML usadas: algo que, en principio, está oculto debido al modelo de desarrollo intrínseco de ASP.NET.
¿Y cuál es el inconveniente de que los controles ASP.NET generen un código HTML que en principio el desarrollador no tiene por qué conocer? Pues que el desarrollador desconoce la calidad de este código generado. No sabe si tendrá JavaScript con errores, si el código cumplirá a rajatabla la especificación HTML, o incluso si cumplirá unas normas básicas de accesibilidad. Un buen ejemplo de ello es el control DataGrid de ASP.NET, que en sus primeras versiones renderizaba las cabeceras de una tabla como elementos de celda TD en lugar de TH, lo que es fundamental para aplicar un control de estilo CSS decente. Según la guía de "Cómo conseguir que un sitio web de ASP.NET sea accesible", ya existe un parche para este inconveniente, pero yo no lo he encontrado en ningún Service Pack ni he encontrado la versión en español de este mínimo HotFix.
Otro de los problemas que veo en ASP.NET tiene que ver con la extracción de datos desde la capa de presentación al modelo de datos. Si se desea un tratamiento avanzado de un dato extraído de una iteración de un componente asignado con el DataBind, deberemos utilizar funciones y código del back-end en las páginas ASPX (usando el método Eval del DataBinder), es decir, que estaremos mezclando lógica con presentación.
Es más, ASP.NET no tiene compatibilidad con XHTML y, lo que es peor, presupone el funcionamiento de JavaScript en la parte del cliente. Un usuario que tenga un navegador sin JavaScript o con JavaScript desactivado no podrá utilizar una aplicación web ASP.NET que tenga una cierta complejidad.
Aunque, todo sea dicho, y es que al parecer la versión 2.0 de ASP.NET (que viene con Visual Studio 2005), la cual aún no he tenido la oportunidad de probar, va a respetar mucho los estándares de la W3C. Sin embargo, en mi opinión, podrán arreglar pequeños problemas o pulir muy bien esta tecnología, pero al final, el concepto inicial en el que se basa, será siempre erróneo.
Un desarrollador web debe conocer bien las especificaciones XHTML, debe desenvolverse bien con JavaScript y usar CSS siempre, no de modo opcional. Por eso yo creo que el mejor modo de utilizar separación de capas de abstracción sin perder el control de la salida XHTML, es utilizar tecnologías propias de XML para la transformación de datos: XSLT. Si quieres más detalles sobre mi modelo de desarrollo web no dudes en leer mi artículo Evolución de mi arquitectura de desarrollo web (desde ASP hasta Mono, pasando por PHP y Java).
Actualización 04-NOV-2007: Hoy al visitar la Wikipedia me he encontrado con cosas que reafirman las quejas que expongo en este artículo. Cito:
ASP.NET 2.0 produces markup that passes W3C validation, but it is debatable as to whether this increases accessibility; one of the benefits of a semantic XHTML page + CSS representation. Several controls, such as the Login controls and the Wizard control, use HTML tables for layout by default. Microsoft has now gone some way to solve this problem by releasing the ASP.NET 2.0 CSS Control Adapters, a free add-on that produces compliant accessible XHTML+CSS markup. However, some controls still rely on JavaScript.
Labels: CSharp, General, Mono, Programacion, WebDev
Comments:
<< Home
Hola Andres, quisiera dar una opinion con humildad de la nota sobre las criticas a ASP.Net. No es que sea un fanatico de .Net, pero es lo que manejo.
No creo que ASP.net sea tan malo como vos lo pintas, por sobre todo cuanto te refererís a que no puede haber una clara linea de que divide la Capa de Presentación con el "Modelo de Datos",bueno quiero decirte que he visto aplicaciones desarrolladas en capas segun en el modelo que propone Microsoft...(http://www.microsoft.com/spanish/msdn/arquitectura/das/images/f02aa06.gif)
La aplicación esta perfectamente dividida, un proyecto por capa o algo así, y despues la Capa de Servicio o fachada, hacia una abstracción de lo que estaba abajo, y brinda una interfaz hacia la Presentación. La Solución cuenta con 2 proyectos de Presentación...uno con Winforms...y otro con ASP.NET.
Y ademas...la capa de Fachada o Servicios, puede ser tambien implementa con Remoting o Web Services, sin tocar nada por abajo.
Te paso el link para que veas algo de programación en capas y veas que no es tan malo ASP.NET si se sabe aprovechar la ventaja que tiene... que no es hacer sitios web...o paginas...sino para Aplicaciones Empresariales.
http://www.ajlopez.com/
Este es un buen ejemplo de programación en capas
http://www.ajlopez.com/downloads/AjConsor-0.1.zip
Sin mas te saludo atte.
No creo que ASP.net sea tan malo como vos lo pintas, por sobre todo cuanto te refererís a que no puede haber una clara linea de que divide la Capa de Presentación con el "Modelo de Datos",bueno quiero decirte que he visto aplicaciones desarrolladas en capas segun en el modelo que propone Microsoft...(http://www.microsoft.com/spanish/msdn/arquitectura/das/images/f02aa06.gif)
La aplicación esta perfectamente dividida, un proyecto por capa o algo así, y despues la Capa de Servicio o fachada, hacia una abstracción de lo que estaba abajo, y brinda una interfaz hacia la Presentación. La Solución cuenta con 2 proyectos de Presentación...uno con Winforms...y otro con ASP.NET.
Y ademas...la capa de Fachada o Servicios, puede ser tambien implementa con Remoting o Web Services, sin tocar nada por abajo.
Te paso el link para que veas algo de programación en capas y veas que no es tan malo ASP.NET si se sabe aprovechar la ventaja que tiene... que no es hacer sitios web...o paginas...sino para Aplicaciones Empresariales.
http://www.ajlopez.com/
Este es un buen ejemplo de programación en capas
http://www.ajlopez.com/downloads/AjConsor-0.1.zip
Sin mas te saludo atte.
Vaya, Darío, muchas gracias por tu aportación; parece muy interesante. Le echaré un ojo cuando tenga tiempo y responderé con mi punto de vista lo antes posible (te enviaré copia, para que no pierdas el hilo).
Muchas gracias otra vez.
Un saludo,
Andrés [ knocte ]
Muchas gracias otra vez.
Un saludo,
Andrés [ knocte ]
Que desarrolles ASP.NET no implica que ya no tengas que saber HTML, CSS, etc.... una cosa no implica a la otra. Lo que dices es equivalenta a que si afirmaras que el que sepa SQL, no sabe lo que es un bucle por que en SQL no existen bucles (he dicho SQL no T-SQL ni PL).
Ahora bien, si hay alguno que piensa que por que en ASP.NET las cosas son más sencillas ya no necesita saber HTML, CSS, etc... allá él, así le irá; significa que no es un autentico profesional.
Ahora bien, si hay alguno que piensa que por que en ASP.NET las cosas son más sencillas ya no necesita saber HTML, CSS, etc... allá él, así le irá; significa que no es un autentico profesional.
Que desarrolles ASP.NET no implica que ya no tengas que saber HTML, CSS, etc.... una cosa no implica a la otra.
No he dicho que lo implique, pero sí es a lo que tiende ese modelo de desarrollo. Los programadores de ASP.NET tienden a saber menos de los detalles internos de la implementación de los "objetos" de ASP.NET.
Por ejemplo, esto es algo parecido a la administración de la memoria en C++ vs. C#. ¿Los programadores de C# ya no conocen detalles sobre administración de la memoria? Hombre, no tiene porqué, pueden saberse al dedillo cómo trabaja el recolector de basura y saberse trucos sobre liberación de la memoria, pero a lo que tiende este modelo de desarrollo es a ocultar estos detalles al programador (cosa que, en este ejemplo, sí me parece bien) para que sea más cómodo trabajar.
Ahora bien, si hay alguno que piensa que por que en ASP.NET las cosas son más sencillas ya no necesita saber HTML, CSS, etc... allá él, así le irá; significa que no es un autentico profesional.
Totalmente de acuerdo contigo.
Un saludo.
No he dicho que lo implique, pero sí es a lo que tiende ese modelo de desarrollo. Los programadores de ASP.NET tienden a saber menos de los detalles internos de la implementación de los "objetos" de ASP.NET.
Por ejemplo, esto es algo parecido a la administración de la memoria en C++ vs. C#. ¿Los programadores de C# ya no conocen detalles sobre administración de la memoria? Hombre, no tiene porqué, pueden saberse al dedillo cómo trabaja el recolector de basura y saberse trucos sobre liberación de la memoria, pero a lo que tiende este modelo de desarrollo es a ocultar estos detalles al programador (cosa que, en este ejemplo, sí me parece bien) para que sea más cómodo trabajar.
Ahora bien, si hay alguno que piensa que por que en ASP.NET las cosas son más sencillas ya no necesita saber HTML, CSS, etc... allá él, así le irá; significa que no es un autentico profesional.
Totalmente de acuerdo contigo.
Un saludo.
Hola, yo participe por 3 años en un proyecto de gran tamaño en .NET y te digo, la mala praxis no la hace el lenguaje o tecnologia sino el desarollador, todas las criticas que mencionas es la caja bonita que te venden para hacer una aplicacion q puedes hacer como Demo pero cuando vas a realizar cosas empresariales el uso del patrones es lo ideal...
.NET puede ser tan "geologicamente" estratificado en capas como tu equipo desee...el problema no es el arma sino el que la usa...
.NET puede ser tan "geologicamente" estratificado en capas como tu equipo desee...el problema no es el arma sino el que la usa...
Que tal leyendo este comentario me di cuenta de algo, el lenguaje en que se desarrolla no es el arma mas fuerte del desarrollador, el arma mas fuerte es que tenga claro el concepto de Programacion Orientada a Objetos. debido a que el lenguaje por ejemplo C# , VB por final van a devolver HTML osea es exactamente igual de que manera manejes presentaciones todo depende del requerimiento que necesites. Para alguien que trabaja en empresas de desarrollo como yo, tiene la suerte de ver como el lenguaje no es el problema el problema es la capacidad del grupo o del unitario que programa ya que teniendo politicas de desarrollos claras se puede lograr cualquier cosa. HTML CSS HTC son utiles a demsa para presnetaciones y validaciones pero tambien esta claro que muchas veces el programador es programador y hoy hace la tarea de diseñador y de programador. Saludos y suerte. Matias
Respecto al comentario que los desarrolladores no tiene control del codigo html generado por los componenetes de asp.net, os pongo bastante interesante.
http://geeks.ms/blogs/sergiotarrillo/archive/2006/09/16/2793.aspx
Post a Comment
http://geeks.ms/blogs/sergiotarrillo/archive/2006/09/16/2793.aspx
<< Home