miércoles, 19 de agosto de 2015

12. Patrones de Diseño (III) - Facade

La programación salvaje es como una enredadera si no tenemos cuidado en muy poco tiempo se mete en todo nuestro proceso complicando cada día más su mantenimiento.

También se puede decir que es como una hidra, que crece y se convierte en un ser de muchas cabezas.

Como programadores no siempre es posible conocer la funcionalidad de todos los módulos, lo mejor siempre es tener módulos especializados y rehusarlos cuando esto sea necesario, pero existe un gran problema en esto, las muchas cabezas que puede tener un módulo y que debemos evitar, es aquí en donde nos ayuda el patrón de diseño del que hablaremos el día de hoy, el patrón Facade, o Fachada, es un patrón estructural que nos ayuda a dar visibilidad del código.

El patrón indica que se debe tener una sola clase de entrada sin importar la complejidad del código que se encuentre en la aplicación.

El patrón ordena el código de tal forma que cuando se emplea el modulo, pese a lo complejo de su interior, solo tendrá un punto por el que toda la funcionalidad sea accedida.

Este es un patrón muy útil, y realmente muy fácil de implementar que nos va a quitar muchos dolores de cabeza en el código.

Bueno siguiendo la lógica de que un programador busca menos teoría y más código, pongamos un ejemplo del uso de este patrón.


Nuevamente tomando el ejemplo de un carro, yo tengo una clase radio, la clase radio se muestra de la siguiente forma:

Como podemos ver el tablero de control en el que el usuario del carro controla el radio es nuestra clase fachada, y esta clase dispara procesos hacia adentro del radio, estos procesos cambian la estación, suben el volumen, controlan la reproducción de MP3, sin saber qué es lo que ocurre más atrás.
Ahora veamos qué pasa si esta clase creada en el punto anterior interactúa con un usuario, que en este caso es un programa que consume el servicio que se encuentra implementado bajo este patrón de diseño.


Resultado, solo un espacio de nombres, el código está estructurado y es más fácil de implementar.

Un paso más para evitar la programación salvaje, saludos



lunes, 10 de agosto de 2015

11. Visual Studio Threads



Visual Studio es un IDE de desarrollo muy completo que nos permite efectuar una gran variedad de actividades más allá de la simple codificación de un programa.


En estos días en que los equipos de cómputo son cada vez más poderosos, el uso de múltiples threads para reducir tiempos de procesamiento se hace cada día más común.


Al deportar un programa Visual Studio nos permite ver que es lo que está haciendo, pero además existe una herramienta visual, que nos permite ver, que threads se están ejecutando.


¿Cuál es la ventaja de esto?, cuando hablamos de una aplicación que tenga varios módulos, varias capas, para dar el mantenimiento adecuado, es necesario saber con qué procesos nos encontramos trabajando al mismo tiempo.


El ver como se distribuyen los procesos nos ayuda a identificar errores de seguridad, de programación, o cuellos de botella.


¿Cómo se hace esto?

Bueno creemos una pequeña aplicación de consola que ejecute múltiples threads

        static void Main(string[] args)
        {
            System.Threading.Thread th1 = new System.Threading.Thread(ProcesoParalelo1);
            System.Threading.Thread th2 = new System.Threading.Thread(ProcesoParalelo2);
            th1.Start();
            th2.Start();
            System.Threading.Thread.Sleep(10000);
            Console.WriteLine("hola");
            Console.ReadLine();
        }

        static void ProcesoParalelo1()
        {
            while (true)
            {
                Console.WriteLine("proceso 1");
                System.Threading.Thread.Sleep(100);
            }
        }

        static void ProcesoParalelo2()
        {
            while (true)
            {
                Console.WriteLine("proceso 2");
                System.Threading.Thread.Sleep(1000);
            }
        }

La aplicación es muy sencilla, únicamente efectúa llamadas a proceso que toman diferente tiempo en llevarse a cabo pero que se efectúan de manera simultánea.

Si ejecutamos la consola, observamos lo siguiente:


Bien ahora pongamos un punto de interrupción

Y veamos quienes son los procesos paralelos que tenemos en nuestra aplicación, para ello iremos a el menú Degug -> Windows -> Parallel Stacks
Esto nos abre un diagrama, en el que podemos ver cuales subprocesos se ejecutan de manera simultanea
Analicemos esto:
El diagrama indica lo siguiente:
1.       Tenemos un thread que se ejecuta sobre el proceso principal
2.       Tenemos un thread en el primer proceso paralelo
3.       Tenemos un thread en el segundo proceso paralelo
Esos 3 threads los esperábamos desde un inicio, ahora ¿Por qué Visual Studio nos indica que hay 5 threads?.
Bueno coloquemos el cursor sobre el diagrama para ver que nos indica
Tenemos 2 procesos que corresponden a los threads paralelos, y uno que corresponde al thread principal, pero aparte tenemos otros 2 .Net SystemEvents, esta clase es la clase que proporciona el acceso al sistema de notificaciones de .NET, además hay un segundo thread en ejecución, este es vsHost.RunParkingWindow, este corresponde a la depuración de Visual Studio.
Saber usar las herramientas quitan dolores de cabeza al implementar aplicaciones, no solo es codificar hay mucho mas.

viernes, 7 de agosto de 2015

10. Instaladores (I)


Lo he pensado bastante en tocar este tema, ya que es un tema que fue incluido desde la versión 2.0 sin embargo he visto que aún existe un desconocimiento del mismo.

Hablo de una instalación tipo Clickonce.

¿Para que me sirve este tipo de instalación?

Este tipo de instalación es muy especial porque permite que un software se actualice, de una manera sencilla, permitiendo que todos mis usuarios tengan la misma versión de una aplicación, y lo mejor de todo esto funciona tanto en Internet como en una Intranet.

Yo puedo establecer una versión mínima con la que puede trabajar uno de mis usuarios, y tengo la ventaja de que puede trabajar desconectado sin ningún problema

Mucho se ha hablado de que las aplicaciones web son la mejor opción, pero en ciertas ocasiones se justifica crear un cliente Windows, con todo el poder de una aplicación de escritorio, con la capacidad de aprovechar el procesamiento local, y que además puede actualizarse de manera tan sencilla como lo es una aplicación web.

Otra gran ventaja de un desarrollo Windows es que siempre se verá igual no hay problema con el aspecto, al poder procesar de manera local, puedo tener aplicaciones desconectadas, que solo se conecten a la red cuando sea necesario.

La aplicación es segura, ya que puede ser firmada por un certificado digital que valide quien es el emisor del producto.

Visual Studio tiene un asistente que me ayuda a hacer este tipo de instalación, sin embargo, lo que haremos en este tutorial será configurarlo de forma manual, para determinar para que sirve cada parámetro de configuración.
  • Creemos una pequeña aplicación, un formulario sencillo en Visual Studio

  • Pongamos alguna funcionalidad, un botón que diga hola mundo

  • Al ejecutarlo obtenemos lo siguiente:


  • Ahora vamos a configurar ClickOnce Seleccionemos el proyecto, y con el botón derecho seleccionamos propiedades


  • Seleccionamos Publicar
Y que es esto, esta es nuestra pantalla de configuración de clickonce, con ella vamos a poder publicar la aplicación de manera rápida.
¿Qué tenemos en esta página?
La primera sección se denomina ubicación de la publicación, en esta sección indicaremos en donde queremos publicar nuestra aplicación, nos pide 2 rutas, una que es en donde Visual Studio dejara la publicación , y una segunda que se emplea cuando Visual Studio no tiene acceso a la ruta en la cual se publicara la aplicación


La segunda sección es Modo y Configuración de Instalación, en esta sección se establecen las principales opciones de cómo operara nuestro instalador, contamos con 4 Botones que nos abren nuevas secciones, así como la posibilidad de generar la aplicación en 2 modos:
·         La aplicación solo está disponible en línea, esta es la opción más cercana a una aplicación Web, pese a que es un winform, solo se puede usar si nos encontramos conectados a la Red.
·         La aplicación también está disponible sin conexión, esta opción nos crea una aplicación que se instala en nuestra computadora, una aplicación completa que podemos actualizar a distancia.


Cada uno de los botones nos ayuda configurar nuestro instalador, de esta forma tenemos:
Este botón abre la siguiente pantalla:
Esta nos permite elegir que archivos se incluirán dentro de la aplicación.
Es muy importante ya que esta le indica a Nuestro paquete cuáles serán los requisitos previos, y de donde los obtendrá, un requisito previo por ejemplo puede ser una base de datos de SQL o un Framework especifico


Una de las pantallas más importantes y la que hace interesante este tipo de instalador

Esta permite mostrar cómo se llevara a cabo la actualización, en que momento la debe ejecutar, y si las actualizaciones se encuentran en una ruta distinta a la aplicación, cual será esta ruta
Además aquí se puede especificar cuál será la versión mínima de ejecución para la aplicación
Datos particulares de la aplicación, ¿Quién la hizo? Si estará ligada a alguna extensión ¿Cómo se mostrara la página web de descarga?


Y por ultimo

La versión de la publicación, es muy importante llevar un order por que las actualizaciones se llevaran a cabo en forma automática.
Ahora si publicamos la aplicación
Instalando




Ahora si necesitan una actualización de su aplicación, solo necesitan modificar la aplicación y publicar nuevamente, y si configuran que debe buscar actualizaciones, la aplicación se actualizara automáticamente.

Saludos