Es un hecho bien conocido que la arquitectura de software en la industria del software es un tema importante y primordial. Es importante diseñar el código para que cada pieza sea fácilmente identificable, para el propósito específico, y encaje perfectamente junto a las otras piezas de un modo lógico. Debe ser fácil de mantener, escalable y tener una gran calidad. Cuando se desarrolla una app para iOS, es importante tener en cuenta que arquitectura iOS se debería utilizar. La gran mayoría de desarrolladores utilizan el patrón sugerido por Apple. Sin embargo, hay mas! En este artículo echaremos un vistazo a la arquitectura VIPER, una de las alternativas más comunes a dia de hoy de MVC que puede ayudarte a superar las limitaciones mientras tener un código bien organizado, mejorando tu sistema de desarrollo.

 

¿Que es la arquitectura VIPER?

 

VIPER es un acrónimo de View, Interactor, Presenter, Entity y Router. Esta arquitectura está basada en Principios de Responsabilidad Unica, que guía hacia una arquitectura más limpia, para tener una estructura mejor de proyecto iOS.

 

Veamos qué significa cada una de las partes del VIPER:

 

View. la responsabilidad de la vista es de enviar las acciones del usuario al presentar y enseñar lo que le dice el presenter.

Interactor. Esto es la columna vertebral de la aplicación, ya que contiene la lógica de negocio descrita por el use cases en la aplicación. El interactor es responsable de atraer data desde la capa de mode, y su implementación es totalmente independiente de la interface del usuario.

Presenter. Su responsabilidad es de coger data desde el interactor en acciones de usuario, crear un ejemplo de modelo vista y llevarlo hacia el View para mostrarlo.

Entity. Contiene el modelo básico de objetos usados por el interactor. Tiene parte de responsabilidades de la capa modelo en otras arquitecturas.

Router. Tiene toda la lógica de navegación para describir lo que la pantalla quiere mostrar y cuando.

 

En la arquitectura VIPER, cada bloque corresponde a un objeto con tareas específicas, inputs y outputs. Es muy parecido a trabajadores en una organización en línea: una vez un trabajador completa su tarea en un objeto, este se pasa al siguiente trabajador en la fila hasta que el producto se completa. Las conexiones entre los bloques representa la relación entre los objetos y el tipo de información que se transmiten entre ellos. La comunicación de una entidad hacia otra se transmite a través de los protocols.

La idea detrás de este patrón de arquitectura es separar las dependencias de tu app, balanceando la delegación de responsabilidades entre las entidades. Básicamente la arquitectura Viper divide tu lógica de aplicación en capas de funcionalidad más pequeñas, cada una de ellas con un strict, con una responsabilidad predefinida. Esto hace que testear las interacciones en los límites de las capas sea más fácil. Encaja bastante bien con pruebas unitarias, y hace que tu codigo se pueda reutilizar.

 

Ventajas clave de una estructura VIPER

 

  • Simplifica los proyectos complejos. Como los módulos son Viper independientes funciona muy bien para equipos de gran tamaño.
  • Lo hace escalable. Habilita a los desarrolladores a trabajar simultáneamente en ello sin problemas.
  • Desacopla el código para volverlo a re-utilizarlo y testearlo.
  • Divide los componentes de la aplicación en función de su rol
  • Marca la responsabilidades claramente, Viper es un campeón en la distribución de sus responsabilidades.
  • Facilidad para añadir nuevas características.
  • Facilita la escritura de test automáticos ya que la lógica de UI se separa de la lógica de negocio.
  • Separa los problemas para que sea más fácil adoptar TDD. El interactor contiene una lógica pura independiente de cualquier UI, lo que hace que sea fácil llevar test a cabo.
  • Facil de utilizar.
  • Crear interfaces más claras y mejor definidas, independientes de otros módulos. Esto hace que sea más fácil cambiar la manera en la que tu interface presenta varios módulos de usuarios.
  • Facilidad para llevar la cuenta de los problemas vía crash reports debido a los principios de responsabilidad unica.
  • Hace el código de fuente más claro, compacto y reusable.
  • Reduce el número de conflictos dentro del equipo de desarrollo.
  • Aplica los principios SOLID.
  • Reduce el número de conflictos mezclados.
  • Puede que quieras crear una arquitectura skeleton inicialmente y más tarde dar módulos uno a uno a otros desarrolladores para implementar la lógica.
  • Hace que el codebase parezca similar. Lo que hace leer el código de otras personas mas rápido.

 

La arquitectura Viper tiene muchos beneficios, pero es importante mencionar que es mejor utilizarla en grandes proyectos de mucha complejidad. Debido al número de elementos involucrados, esta arquitectura causa gastos generales cuando se aplica en proyectos pequeños, así que la arquitectura Viper puede ser una medida exagerada para pequeños proyectos que buscan la escalabilidad. Para este tipo de proyectos es mejor utilizar otro método, como MVVM.

Hablando de la posibilidad de utilizar arquitectura Viper en tu app ya existente, en este caso, considera añadir una nueva característica con Viper. Esto deja que construyas un módulo utilizando arquitectura de Viper y además te ayuda a encontrar problemas que hagan que sea más complejo adoptar una arquitectura basada en los principios de responsabilidad unica.

La arquitectura de Viper es una buena solución para construir software que funcione, aplicaciones iOS para estar orgulloso! Si tienes alguna pregunta, déjalos en la sección de comentarios de abajo!

 

Suscríbete a nuestro newsletter para estar al día de los eventos, meet ups y demás artículos!

 

Si este artículo sobre Arquitectura Viper te gustó, te puede interesar:

 

Integración continua en iOS usando Fastlane y Jenkins

F-Bound en Scala

Tendencias en aplicaciónes móviles

Patrón MVP en iOS

Debugging con Charles Proxy en Android emulator

Por qué Kotlin?