domingo, 20 de mayo de 2012

Aplicaciones MODELO-VISTA-CONTROLADOR en Android


Quiero aprender Android, el desarrollo. Ok, bueno, pero... “¿Por dónde empiezo? ¿Qué debo saber? ¿Cómo debo programar?”.
Yo parto de una primera premisa “El desarrollo móvil NO es fácil pero tampoco es imposible”. Lo más importante al inicio, aparte de irte familiarizando con las herramientas y con los lenguajes que puedes utilizar del abanico de opciones disponibles, es estar al tanto de las arquitecturas que te permitirán crear buenas aplicaciones no sólo desde el enfoque de performance sino también desde un enfoque técnico.
El día de hoy vengo a presentar  la arquitectura que se utiliza en el desarrollo móvil, su importancia y por qué si aún no la conoces debes considerar seriamente empaparte de ella para cambiar tus prácticas de programación.
En Android utilizamos el patrón de arquitectura llamado Modelo Vista Controlador (MVC) cuya principal bondad consiste en separar los datos de una aplicación, la interfaz de usuario y la lógica de negocios en tres componentes distintos que se relacionarán para al final tener como resultado nuestra aplicación.
De esta forma podemos seccionar de forma más fácil nuestro equipo de trabajo y dedicarnos a desarrollar nuestros componentes de tal forma que construyamos módulos o librerías con funcionalidades específicas que incluso podríamos reutilizar en proyectos posteriores y no simplemente en el proyecto actual. Para lograr esto, el diseño de la arquitectura de nuestra aplicación juega un papel importante y la capacidad de abstracción que tengamos desarrollada.
Por ejemplo, yo me podría dedicar a desarrollar una librería que me permita hacer conexiones con la API de Twitter. En mis clases puedo diseñar todas las funciones que me ayudarán a lograr las llamadas al protocolo OAuth, aquellas que me permitan twittear, recuperar información de tweets, followers, trending topics, etc. Esta librería, con un buen diseño y abstracción podría ser útil para todos los proyectos que necesiten conectarse con Twitter.
Volvámonos un poco teóricos y expliquemos de qué se tratan los componentes de este modelo:
  • Modelo. Nos referimos con modelo a las representaciones que construiremos basadas en la información con la que operará nuestra aplicación. En Java, el modelo viene siendo análogo a los beans que tienen la particularidad de ser reutilizables y nos ayudan a cumplir con el proverbio de oro “Don´t Repeat Yourself” (DRY) haciendo a nuestras aplicaciones escalables. En esta parte del modelo también juega la decisión de qué modelo para almacenar información utilizaré. ¿Base de datos? ¿Web services? El modelo que elijas depende obviamente de las necesidades de información de tu aplicación. Actualmente tenemos tutoriales de SQLite y WebServices que te pueden ayudar.
  • Vista. La vista no es más que la interfaz con la que va a interactuar el usuario. En Android, las interfaces las construimos en XML. Suelo utilizar mucho la analogía de que esta parte es realmente parecida a lo que hacemos en el desarrollo web con los CSS. Contruimos nuestro esqueleto en XML que equivale al HTML de un sitio. Posteriormente, con ayuda de estilos, que también los escribimos en XML, podemos empezar a darle formato de colores, posiciones, formato, etc. a nuestro esqueleto. Esto equivale a los CSS. Si vienes de un ambiente web, aprovecha ese conocimiento para aplicarlo a crear aplicaciones Android. 
  • Controlador. Finalmente nos topamos con el controlador que son todas esas clases que nos ayudarán a darle vida a esas interfaces bonitas que ya construimos y nos permitirán desplegar y consumir información de/para el usuario. Estos controladores se programan en lenguaje Java y son el core de la aplicación.
¿Puedes ver la ventaja? Así es, podemos tener perfiles especializados en construir cada uno de estos componentes y tener un resultado de calidad en cada uno y al final obtener una buena aplicación. El truco para que todo salga bien es ser disciplinados para poder ser programadores ordenados, eso es vital en la aplicación de esta arquitectura. Por experiencia, te puedo decir que si te esfuerzas en construir una buena arquitectura de aplicación te ahorrarás muchos dolores de cabeza después y te evitarás tener que duplicar líneas de código que hacen lo mismo, podrás escalar fácilmente tu aplicación, agregar funcionalidades nuevas sin tanto embrollo y ¿por qué no?, facilitar el comienzo de nuevos proyectos.
Para empezar a aplicar esta arquitectura debes saber también su flujo:
  1. Todo parte cuando el usuario interactúa con tu aplicación, el jugador actual es la vista. (El usuario quiere mandar un Tweet).
  2. El controlador recibe la notificación de la acción solicitada. (Por medio de un handler verificará si el usuario está logueado o no en su cuenta de Twitter).
  3. El modelo es llamado para ser modificado. (Podemos accesar al caché de tweets que se tenían desde la última vez que el usuario abrió la aplicación y se conectó a Internet y agregar el nuevo tweet).
  4. Una vez que tenemos los nuevos tweets y la publicación que quiere hacer el usuario, el controlador nuevamente toma partida para llamar a la vista correcta que desplegará el Timeline actualizado.
  5. ¡Listo! El usuario ya tiene la nueva interfaz para seguir interactuando con la aplicación y volver a iniciar el ciclo cuando solicite otra acción.
Otra de las cosas que te ayudan a seguir este modelo es tener ordenado tu proyecto. Utiliza las convenciones de los lenguajes que utilices y las buenas prácticas para que sea más fácil acoplar a tus compañeros de equipo (no siempre uno solo se echa el paquete de hacer una aplicación y menos aún si es una compleja). Te aconsejo empezar con cosas tan sencillas como el nombramiento de paquetes, clases y variables, y después organizar los recursos que vayas a utilizar delegando siempre a cada componente lo que le corresponde.
En la web puedes encontrar muchos recursos que puedes leer para ver ejemplos de la aplicación de esta arquitectura. No es algo nuevo pero algunos no la conocen.  Sin importar que encuentres un ejemplo para web, recuerda que en la programación únicamente cambia el lenguaje, la lógica y la metodología es la que se preserva.
Si aún no utilizas esta arquitectura para construir tus aplicaciones Android creo que es un buen momento para tomarlo en cuenta y empezar a aplicar.

No hay comentarios:

Publicar un comentario