Hoy en día uno de los principales elementos tecnológicos que las personas usan son las aplicaciones móviles, existen de distintos tipos y para diferentes necesidades, sus funcionalidades y tareas que ofrecen son muy variadas y es por ello que algunas permanecen muchos años en en el mercado. Pero no todo es color rosa cuando se habla se aplicaciones móviles, hablando específicamente de los programadores, ya que, para llegar a obtener una aplicación de calidad se necesitan seguir distintos estándares y reglas que garanticen su correcto funcionamiento.

Uno de los principales retos a los que se enfrentan la mayoría de desarrolladores es el mantenimiento de un sistema, ya que, si no se sigue una arquitectura y buenas prácticas de desarrollo este puede tener una codificación tan complicada que es prácticamente imposible de mantener o corregir algún error que suceda.

Hablando específicamente del desarrollo de aplicaciones móviles para iOS existe una arquitectura ademas de MVC, MVVM llamada VIPER, la cual es creada a partir de MVC y que incluye más capas, de esta manera se asegura de cumplir los principios de responsabilidad única. Esto último se refiere a que deben existir módulos o clases que se encarguen de cierto trabajo para que, en conjunto, se logre cumplir con la funcionalidad de un módulo específico.

¿Qué significa VIPER?

VIPER es una palabra formada por la letra inicial de cada una de sus capas, las cuales se explican a continuación:

V - View: Hace referencia a la vista o elementos gráficos que son visibles y con los que el usuario interactúa. es importante mencionar que la única función de la vista es mostrar datos, es decir, en la clase que controla la vista no se podrá hacer ningún tipo de validación o llamados a funciones sin que el PRESENTER lo indique.

I - Interactor: Esta capa es donde ocurre toda la magia, aquí, se realizan todas las validaciones necesarias, llamados a servicios externos o consultas a la base de datos local.

P - Presenter: Capa que se comunica con la VISTA y el INTERACTOR, esta es la encargada de ejecutar las funciones que actualizan datos en la vista y es también la que obedece ordenes del INTERACTOR, de esta manera es posible afectar los elementos o información de la vista con base en validaciones realizadas en la última capa mencionada.

E - Entity: Se refiere únicamente a los modelos(clases) que son necesarios en el proyecto.

R - Router: También conocida como Wireframe, es la capa que permite realizar la navegación entre vistas o hacer “Segues" entre ellas. Es muy importante esta capa ya que es aquí en donde se asignan los delegados de la vista que será presentada y de esta forma es posible utilizar todos los métodos definidos en las clases de la nueva vista.

¿Cómo utilizar VIPER en un proyecto de Xcode?

Antes de ver cómo se utiliza, es importante conocer que esta arquitectura funciona 100% con protocolos o delegates, es decir, cada capa de tener su delegado e implementar los delegados de las capas con las que se comunica. Por ejemplo, la vista tendrá su delegado el cual será implementado por el presenter, de la misma manera el presenter deberá implementar el delegado de la vista, para que de esta forma se puedan comunicar y mandar información entre capas.

La creación de delegados para cada capa, la asignación de los mismos y la inicialización de todo esto puede llegar a ser bastante tedioso y complicado, ya que por lo menos se deben crear 5 archivos, uno para cada capa (V-I-P-E-R). A ellos se puede agregar un archivo más que se encargará de la conexión de datos externa y otro para la conexión de datos local. Ambos con sus delegados correspondientes. En fin, una tortura solo para tener la base para comenzar a programar.

Para evitar todo este trabajo, es posible utilizar plantillas que están echas para que solamente le indiques el nombre del módulo y automáticamente cree todos los archivos con sus respectivos delegados, agregando también el código que los inicializa y únicamente te reste agregar el Storyboard y los modelos que necesite tu proyecto.

¿Cómo agregar una plantilla en Xcode?

  1. Descargar la plantilla del siguiente link: https://github.com/csagency/manage/blob/VIPER- iOS/VIPER%20CFEAPPS.xctemplate.zip
  2. Descomprimir VIPER CFEAPPS.xctemplate.zip.
  3. Entrar en el finder luego aplicaciones y buscar XCode.
  4. Ahora botón derecho sobre el icono y Mostrar contenido del paquete.
  5. Dentro del paquete de XCode tenemos que colocar nuestra carpeta VIPER CFEAPPS.xctemplate en la siguiente localización: Contents > Developer > Platforms > iPhoneOS.platform > Developer > Library > Xcode > Templates > File Templates > Source.
  6. Reiniciamos XCode y ya podremos usar nuestro VIper template.
    La plantilla proporcionada es solo una recomendación ya que existen distintas.

Ventajas y recomendaciones

  1. Archivos con menos líneas de código.
  2. En proyectos grandes facilita el mantenimiento.
  3. Los proyectos tienen alta escalabilidad, debido a que todo esta separado
  4. Facilidad para añadir nuevas características.
  5. Hace el código de fuente más claro, compacto y reusable.
  6. Divide los componentes de la aplicación en función de su rol.
  7. Facilidad para llevar la cuenta de los problemas vía crash reports debido a los principios de responsabilidad única.
  8. Aplica los principios SOLID.
  9. Facilita la escritura de test automáticos ya que la lógica de UI se separa de la lógica de negocio.
  10. Reduce el número de conflictos al juntar el trabajo del equipo de desarrollo.

Esta arquitectura es sin duda alguna un herramienta que, de ser aplicada de manera correcta, tiene el potencial para poder hacer que un proyecto sea mantenible por mucho tiempo, sin embargo, se recomienda que se aplique en proyectos que sean grandes y complejos, esto por todos los componentes que aquí intervienen, ya que en proyectos pequeños puede ser un tanto tedioso y afectar el tiempo de desarrollo.

Recomendaciones:

  • Implementa la arquitectura por módulo y no por proyecto, esto permitirá tener archivos con pocas líneas de código y será sencillo encontrar errores o incluso funciones espcíficos.
  • Hablando a nivel código, date un tiempo para analizar la información que pasarás entre capas, ya que si no lo haces, puede ser muy tedioso agregar esos parámetros.
  • Utiliza un archivo singleton que te permita agrupar funciones comunes, por ejemplo, mostrar alertas, poner estilos, etc. esto para evitar repetir código y tener archivos “Limpios”.
  • Crea una carpeta en donde agrupes todos los módulos de tu proyecto.
  • Sigue el flujo que marca Viper, aunque parezca que te puedes saltar “pasos” trata de seguirla comunicación entre capas como esta establecido.
  • Enfoca la lógica de negocio en el interactor.

Conclusión

El análisis antes de comenzar a codificar siempre ha sido una de las etapas en el desarrollo que es de vital importancia, si se lleva a cabo de manera correcta se disminuirán los contratiempos que puedan suceder durante el transcurso del proyecto. Con VIPER particularmente si no se realiza este análisis te lo recuerda constantemente ya que es muy tedioso corregir funciones o procesos con información incorrecta. Esta arquitectura sin duda alguna nos da una un amplio panorama para poder crear aplicaciones de calidad, su estructura e ideología nos permite distribuir perfectamente las tareas a desarrollar no solo en módulos, si no con el equipo de trabajo completo y de esta manera tener una mayor certeza de que el resultado final será el esperado.