viernes, 9 de agosto de 2013

Patrón de diseño MVVM en Windows Phone 8 Parte 1

Iniciemos este post, con la definición inicial de lo que vamos hablar.
 
¿Qué es MVVM?
Es el patrón de diseño natural para plataformas XAML, este patrón  aprovecha al máximo el enlace a datos {Binding}, diseñar nuestras aplicaciones bajo este nos brinda una gran cantidad de ventajas, mencionaremos algunas:
·         Separación de preocupaciones, es decir, tienes en diferentes componentes bien definidos una sola funcionalidad, tienes la ventaja de que un componente ejecute una solo funcionalidad.
·         Pruebas unitarias están podrán evaluar que los métodos y objetos funcionen de una manera correcta y consistente, esta pruebas se pueden hacer de una forma más eficiente. Al no tener una separación de las funcionalidades no es más complicado escribir estas pruebas en código.
·         El mantenimiento de código es más rápido, al estar separado en capas el código nos facilita esta tarea.
·         La consistencia del código y nuestra aplicación será más acoplable, nos permite reutilizar código de una forma más sencilla.
·         El flujo de trabajo entre diseñadores y desarrolladores es más ágil, así cada uno se focaliza a su trabajo, el diseño y navegación por una parte y en el desarrollo te enfocas a la funcionalidad y como codificar esto.
Al utilizar este tipo de patrones se beneficia la aplicación sin importar el tamaño o funcionalidad.
Focalicemos esto en que los patrones de diseño no son un Dogma u obligación implementarlos, son sugerencias para aprovechar al máximo las características de la plataforma de desarrollo (XAML y .Net). Si bien es recomendable la utilización de esto patrones, cada quien al momento de desarrollar decide utilizarlos o no.
Esquematicemos esto para comprender un poco más la forma como deberíamos implementar este patrón, este debería de contar con tres piezas (Model,View,View-Model)

 
 
 View:
1.       Contendrá todo nuestro código xaml (páginas, user control, estilos, diccionarios de recursos, data template,  etc)
2.       Define la interfaz de usuario.
3.       Define la estructura y apariencia de lo que el usuario ve en pantalla.
4.       Se sugiera poco o nada de Code-Behind.
5.       La vista se actualiza a través de las expresiones Bindings
View-Model:
1.       Es una abstracción de la Vista (View)
2.       Se implementa la lógica de la presentación
3.       Adapta el modelo a la vista.
4.       Expone propiedades a las que se enlaza la vista (datos y comandos)
5.       Expone métodos que los comportamientos de una vista pueden invocar.
6.       Desacoplamiento y Testeability es el objetivo principal
Model:
1.       Es nuestro dominio, lo que manejaremos como datos
2.       Objetos de datos
a.       DTO (Data Transfer Object), clases POCO (Plain Old CLR Objects)
b.      Modelo de datos generado
3.       Capa de servicios
a.       Repositorios
b.      Objetos de Negocio
4.       Clases que representan todos los datos de la aplicación
Relación entre las tres piezas:
a.       Generalmente una vista tiene un View-Model.
b.      Un View-Model puede ser usado  en una o más vistas
c.       Un Model puede ser utilizado en uno o más View-Models

 
Un View-Model bien construido se puede utilizar no solo en una aplicación sino utilizarlo en más de una aplicación (reutilizando código).
Existen 2 estrategias para relacionar el View con el View-Model, como sabe una vista que View-Model va utilizar:
1.       Primero la vista (View First)
a.       La Vista crea el View-Model (en XAML o Code-Behind).
b.      La vista tiene inyectado el View-Model (propiedad o constructor).
2.       Primero el View-Model (View-Model First)
a.       El View-Model crea la vista, se enlaza así mismo a la vista.
Pensando en MVVM
Para realizar algún cambio dentro de nuestra vista, es importante tener enlazados todos los controles y sus propiedades, es decir, para cambiar un color, posición, animar, etc.

Para que la vista ejecute código los controles de la vista se enlazan a propiedades ICommand, los comportamientos de la vista pueden invocar métodos o enlazar un evento a un comando.

En el siguiente Post, vamos a realizar el ejemplo práctico de este tema.

martes, 23 de abril de 2013

Privacy Notice Shortcuts Vss

Shortcuts Vss undertakes to keep confidential personal data and take appropriate technical and security measures to prevent such information from being lost or given unauthorized use.

Using the application could generate extra costs for data traffic with your provider Internet service, this because the information is automatically updated regularly.

miércoles, 27 de febrero de 2013

Windows Phone 8 Programación Asíncrona

Hola muy buen día, en este Post hablaremos un poco sobre cómo podemos generar aplicaciones fluidas para Windows Phone 8.


La generación de código para operaciones rápidas y fluidas en la nueva forma de programación sobre la plataforma de Windows Phone 8, es un tema primordial y de lo primero que debemos tomar en cuenta para considerar la publicación de nuestra App en él Store de Windows. El principal problema para garantizar esto se presenta en el momento donde nuestra aplicación consume algún dato o información de métodos o servicios que pueden tardar en responder.


¿Cómo podemos atacar esto?

Es una respuesta muy fácil “La programación Asíncrona Basada en Tareas” es la principal opción para poder mantener una interfaz de usuario rápida y fluida. Los métodos o tareas Asíncronas se escriben prácticamente de la misma forma en que se escriben los métodos Síncronos.


Windows Phone 8 nos permite generar diversas formas o métodos Asíncronos, como BackgroundWorker la cual permite ejecutar tareas en segundo plano y de esta forma tomar métodos asíncronos, adicional a esto y más utilizado es la "Programación Asíncrona Basada en Tareas", la cual ocuparemos para realizar una pequeña práctica de esto. Esta forma de trabajo es más utilizada y la forma de implementación es rápida y segura.


¿Dónde ocupar tareas Asíncronas?

Todos los métodos Asíncronos deben devolver un Void o Task genérico, utilizamos Void cuando creamos métodos que no deben devolver algún valor para el usuario, cuando un método Asíncrono tiene que devolver algún valor al usuario deben regresar un Task genérico Task(T). Esto lo veremos en ejemplo siguiente. Todos los métodos que tengan llamadas a procesos de los cuales esperamos repuesta deben ser métodos Asíncronos (async).


El operador Await

Que es el operador await, este operador en el código nos indicara que estamos en espera de que un proceso nos envíe una respuesta, de esta forma nosotros podemos seguir interactuando con la aplicación sin afectar lo que está ejecutando nuestra aplicación en otro Thread o en segundo plano.

Se aplican al operador await a una tarea ó método asincrónico para suspender la ejecución del método hasta que la tarea aguardada se complete. La tarea representa el trabajo en curso.


El método asincrónico en el que se utiliza await debe modificarse mediante la palabra clave async . Este método definido mediante el modificador async suele contener una o más expresiones await a esto se le denomina método async.



Imagen 1.


¿Cúando utilizar el operador Await?

Siempre que necesitemos esperar un resultado de un método para la programación Asíncrona debemos incluir el operador await, si no es de nuestro interés esperar el resultado de nuestra operación podemos omitir dicho operador.


Pasemos ahora hacia un ejemplo práctico de esto veamos la forma de ejecución de nuestra aplicación. Como se encolan las llamadas y cómo podemos interactuar con los métodos Asíncronos. Esta aplicación es muy rápida y sencilla pero muestra la esencia del trabajo Asíncrono.


Vamos a crear un proyecto en Windows Phone Application en Visual Studio 2012, lo llamaremos ProgramacionAsync. (Puedes llamarlo como tú gustes).

Ahora demos crear la siguiente interfaz.


Imagen 2.

Una vez generada esta interfaz abrimos el archivo MainPage.xmal.cs y vayamos a codificar un método de tipo "int", en este método escribiremos un mensaje sobre la ventana de Debug (ouput) el cual indique el inicio de la aplicación, así como, el hilo donde se ejecutará. En este hilo simularemos una tarea que se tarda algunos segundos en responder.
El código es el siguiente.



Imagen 3.

Una vez generado este método, completemos el código siguiente para cada botón respectivamente de nuestra pantalla MainPage.xaml el cual queda de la siguiente manera.



Imagen 4.

Ahora ejecutemos la aplicación, pulsemos el botón "calcular" y veamos que pasa en la ventana de Debug (output). Una vez terminada la acción pulsemos nuevamente el botón "calcular" e inmediatamente pulsemos el botón "saludar". Observemos las siguientes imágenes que debemos obtener.



Imagen 5.

Esta primer imagen muestra el comportamiento del proceso de calcular y el hilo donde se ejecuta, al estar trabajando de forma Síncrona el saludo tarda en salir y se observa de la siguiente forma.



Imagen 6.

Detengamos la aplicación y agreguemos un botón llamado "btnAsync" y el texto del contenido será "asíncrono", nuestra pantalla ahora lucirá de la siguiente forma.



Imagen 7.

El siguiente paso es generar un método asíncrono que devuelva un Task Genérico, como mencionamos en la parte superior "Task(T)", el cual llamara a nuestro primer método síncrono para simular el tiempo de respuesta. El código queda de la siguiente forma.



Imagen 8.

Para finalizar coloquemos el código contenido en el evento del botón "btnAsync" el cual queda de la siguiente forma.



Imagen 9.

Una vez terminado esto compilemos la aplicación para revisar que no tengamos ningún error y ejecutemos para ver que sucede con los llamados. Pulsemos el botón "asíncrono" y veamos el resultado de la ventana Debug (output), a continuación veamos las imágenes que esperamos.



Imagen 10.

Observemos que el llamado asíncrono se ejecuta en un hilo y el método síncrono se ejecuta en otro diferente, esto lo observamos en los mensajes que enviamos a la ventana de Debug (output).


Ahora pulsemos nuevamente el botón "asíncrono" e inmediatamente pulsemos el botón "saludar", observemos que a diferencia de la ejecución anterior el mensaje de saludo se ejecuta de inmediato mientras la ejecución del cálculo se esta realizando en otro hilo.


Imagen 11.


Bien con esto hemos terminado el ejercicio, en el cual comprobamos la mejor forma de generar una interfaz rápida y fluida en nuestras aplicaciones. Esperando que el contenido sea de utilidad. Saludos!!!

jueves, 17 de enero de 2013

Virtual Machine and Hands on Lab ALM 2012

Hola espero este aporte les sea de utilidad, es muy corto pero el artículo que les recomiendo es muy bueno, para considerar el invertir tiempo en revisarlo y desarrollar los laboratorios.
Para todos los interesados en ALM, les recomiendo este blog.
Virtual Machine and Hands on Lab ALM 2012

Yo ya inicie la descarga del material.

Saludos, esperando sea de su agrado y utilidad.