Benditos TableAdapter

Recuerdo la primera vez (y no tan primera), en la que empecé a trabajar con aplicaciones cliente-servidor, donde el cliente realizaba consultas a la base de datos. En concreto fue una aplicación en un entorno WAMP (Windows-Apache-MySQL-PHP). En aquel momento el problema de realizar consultas se realizaba de manera algo rudimentaria, vamos, la select a piñón en el código, mezclado además entre el propio diseño de la página, y poquito más. La cosa fue mejorando cuando a partir de alguna pequeña técnica y concatenando strings la cosa tomaba mejor forma. Eso sí­, el gran salto vino cuando conocí­ cómo resolver el problema a través de clases de manejo de SQL, las cuales te ayudaban a realizar selects, updates, inserts y deletes, abstrayéndote un poco de lo que es el SQL en sí­. Es más, realmente podí­as hacer una consulta en una base de datos sin tener ni idea de qué era el SQL.
A medida que pasó el tiempo, y con algo más de experiencia, apareció la necesidad clara de relacionar las interacciones contra la base de datos directamente con cada uno de los objetos del modelo de negocio. Es decir, ya no sólo crear las consultas ayudado por una jerarquí­a de objetos, si no que dichas consultas tuvieran sólo sentido embebidas en las clases que te ayudaban a gestionar el negocio. Ejemplo simple: cuando tengo que realizar una select que me retorna todos los usuarios de mi aplicación, voy a utilizar métodos de mi propia clase de Usuarios que son los que van a tener incorporados por debajo las clases de interacción con la base de datos.
Normalmente se puede hacer una relación 1 a 1 entre las tablas de base de datos maestras de una aplicación y las clases (hablando en términos de programación orientada a objetos). Qué bonito serí­a, pensaba yo, que cada vez que creo una tabla en mi base de datos, inmediatamente tuviera un objeto que me ayudara a manejarla. Poder acceder directamente a los campos, conocer su tamaño, su tipo, poder añadir métodos para realizar inserts, updates, selects… Es más, era algo que preparaba manualmente. Creaba la tabla, luego un objeto para manejarla, donde cada campo de la tabla era una propiedad de la clase, creaba métodos para realizar inserts, selects… Vamos, para mi una maravilla, era algo laborioso, pero a mi parecer bastante elegante.
Qué bonito, seguí­a pensando yo, que llegue un momento que este se pudiera crear automáticamente. Y… entonces salió Visual Studio 2005 y los TableAdapter. Madre mia, alguien habí­a escuchado mis plegarias y habí­a hecho exactamente lo que necesitaba. La verdad es que hací­a ya tiempo que conocí­a la existencia de los TableAdapter, pero hasta hace poco no habí­a tenido la ocasión de trabajar directamente con ellos.
Soy totalmente conocedor de que aíºn me queda bastante tiempo para dominarlos, pero por lo que conozco ahora, realmente me parecen una auténtica maravilla. Para quien desee conocerlos, dejo un link, http://msdn2.microsoft.com/es-es/library/bz9tthwx(VS.80).aspx
Saludos a todos!

A vueltas con las WCL (Windows Control Library) y los Controles de Usuario .NET

Hola a todos,
Qué bonito serí­a poder desarrollar en web con la misma facilidad que se hace con una aplicación de escritorio, ¿verdad? Pues si es ese el problema que os desespera, tal vez sean las WCL la solución a vuestro problema. Y digo tal vez porque el marco donde puede ser (a mi parecer) viable su uso, es bastante reducido, aunque en caso de que tus necesidades se ajusten a sus requerimientos y restricciones, sea la solución a parte de tus dolores de cabeza.
Voy a ser algo Práctico, y en lugar de ponerme a explicar lo que es una WCL, voy a tirar de metodologí­a, en concreto con el término reusabilidad, y os voy a dejar un link con una explicación bastante buena al respecto… http://www.microsoft.com/spanish/msdn/comunidad/mtj.net/voices/art94.asp
 Tal vez os suena la cosa un poco a ActiveX, y hablando de ActiveX puede que os venga a la cabeza “problemas de seguridad”. Las WCL usadas como controles embebidos en el navegador parece que quieren dejar de lado ese problema y me parece a mi que Microsoft ha tirado de forma bastante clara en ese sentido. Basta que abramos el Visual Studio 2005 e intentemos hacer un ActiveX en VB.NET o C#, para comprobar que es imposible. O lo hacemos en C++ o nada de nada. O eso, o tiramos de WCL.
En cuanto a seguridad, efectivamente, se ha mejorado. Para poder ejecutar una WCL embebida en el navegador vamos a necesitar ajustar la configuración de nuestro .NET Framework para permitir ejecutar aplicaciones que provengan de una determinada dirección web. Estoy puede resultar hasta un engorro, pero es la parte que nos queda poner a nosotros para que todo esto funcione.
¿Y la viabilidad? Pues teniendo en cuenta las restricciones, juzguen ustedes mismos. Para poder ejecutar una WCL embebida en el navegador vamos a necesitar primeramente que el navegador sea Internet Explorer, y, además, por lo que parece deberá ser servida desde el servidor de aplicaciones de Microsoft, Internet Information Server (almenos por ahora no he podido demostrar lo contrario). Por supuesto, deberemos tener instalado el .NET Framework con el que se haya desarrollado la WCL instalado en nuestra máquina. Vamos, todo Microsoft. ¿No supone todo esto un problema para vosotros? Entonces, tal vez sí­ que sea esta la solución para vuestro problema 🙂
 ¡Ventajas! Una vez superadas las barreras de entrada, tenemos bastantes. Una de las que más me llama la atención que es la WCL que generemos podrá ser llamada desde una aplicación web, pero al mismo tiempo ser incluida en una aplicación de escritorio. Basta añadir la referencia a la dll que se genera en el proyecto y… voila. Por supuesto tenemos la posibilidad de utilizar todos los controles windows de una aplicación de escritorio, y que desde una aplicación web se nos hace realmente complicado o imposible ejecutarlos en la máquina cliente, por ejemplo: aplicaciones multi-hilos, acceso al sistema de archivos, recursos compartidos… ListViews, DataGrids, ImageList, Meníºs… Todo lo que podemos utilizar en una aplicación de escritorio.
¿Tiene sentido crear una aplicación web completa con esta solución? Tal vez no, pero puede ayudarnos a solventar problemas puntuales, de forma algo más cómoda, rápida y elegante. Por ejemplo, poder seleccionar fácilmente imágenes a transferir del equipo local para luego enviarlas al servidor remoto, controlar un escáner, una impresora,  tratar gráficos con GDI o imágenes en general.
 Con un poco de imaginación y algo de práctica… se pueden conseguir cosas bastante interesantes 🙂
Saludos!