Coding Dojo

Aprende Kotlin refactorizando una app

Aprende Kotlin refactorizando una app
En: Coding Dojo, Kata, Kotlin, Best Practices, Clean Architecture, Testing, Espresso, MVP

Normalmente cuando aprendemos algo nuevo, después practicamos lo aprendido creando algo desde 0, ya sea una app sencilla o practicando algoritmos utilizando metodologías basadas en testing como TDD.

Sin embargo cuando queremos trasladar esos conocimientos nuevos a nuestro día a día en el trabajo, es habitual que nos encontremos con una barrera importante, no tenemos que crear algo de 0 sino que estamos trabajando en un proyecto existente.

Cuando sucede esto no tenemos muy claro como aplicar nuestros conocimientos nuevos.

¿Por qué aprender refactorizando?

Para mí, el principal problema es que se asimilan los nuevos conceptos solo creando desde 0.

Creo que es importante combinar otras prácticas donde se refactoriza algo que ya existe porque los inputs que se adquieren al aprender refactorizando son distintos y se complementan a los que se adquieren al aprender creando algo de 0.

Desde hace tiempo vengo facilitanto en las empresas donde asisto a impartir formación los clásicos katas de TDD, y los combinamos con unos katas donde no se crea algo de 0 sino que lo que hacemos es refactorizar una aplicación existente.

He creado una versión para Kotlin de estos katas donde el objetivo es practicar Kotlin mientras vamos refactorizando una aplicación sencilla hacia buenas prácticas de desarrollo Android.

Al ser Kotlin totalmente interoperable con Java va a ser más frecuente refactorizar aplicaciones existentes utilizando Kotlin que crearlas desde 0.

Estas prácticas se acercan un poco más a lo que más habitualmente hacemos en nuestro día a día.

La aplicación a refactorizar

La aplicación consiste simplemente en un listado de películas y su correspondiente pantalla de detalle.

Es una aplicación fuertemente acoplada al framework de Android, sin una arquitectura testable, no tiene la lógica de presentación ni de dominio bien identificada ni aislada, no existe ningún test y está escrita en Kotlin.

El repositorio de GitHub

El repositorio donde tengo los katas es este:
https://github.com/xurxodev/Movies-Kotlin-Kata

En la rama master estan todos los katas resueltos por mí y cada kata tiene su propia rama.

Los katas son evolutivos por lo tanto cada kata parte de mi solución en el kata anterior.

Si vas realizando todos los katas en orden, lo mejor es que siempre partas de tu propia solución anterior.

En las empresas suelo plantear la realización de los katas por parejas haciendo pair programming.

Kata 1 - Inyección de dependencias

La rama para este kata es kata di movies.

El objetivo es empezar a refactorizar hacia una aplicación un poco más testable.

A medida que en una aplicación se va creando una arquitectura más testable van a surgir nuevas dependencias y puede ser más complicado montar la infraestructura de inyección de dependencias.

Creo que es mejor montar esta infraestructura cuando no existen muchas dependencias porque va a ser más fácil de asimilar.

En este kata al ser una aplicación Android, se utiliza Dagger 2 como inyector de dependencias.

Se aprende a identificar dependencias, se practica cómo se configura Dagger, se crea al menos un módulo y un componente.

En el caso de dagger hay alguna variación en la configuración respecto a java, así que este kata viene bien para empezar.

Kata 2 - Model View Presenter

La rama para este kata es kata mvp movies.

El objetivo es separar la lógica de presentación utilizando el patrón MVP.

En este kata se aprende a identificar lo que es lógica de presentación y se empieza a utilizar el principio de inversión de dependencia para que el presenter no dependa directamente de la vista sino de una abstracción.

La segunda parte del kata consiste en extraer la navegación entre las pantallas en un objeto Navigator liberando así de esa responsabilidad al activity.

Una vez terminado este kata el activity solo tiene una responsabilidad, representar la información.

Kata 3 - Clean architecture

La rama para este kata es kata domain data movies.

El objetivo de practicar Clean Architecture utilizando kotlin.

Se practica la identificación de casos de uso y se sigue utilizando el principio de inversión de dependencia ya que la capa de dominio no puede depender de ninguna capa externa.

Al estar trabajando con Kotlin, es buen momento para hacer el cambio de chip pasando de utilizar interfaces a modo de callbaks como es habitual en Java a utilizar lambdas de Kotlin.

Kata 4 - Testing con Espresso

La rama para este kata es kata espresso movies.

El objetivo es practicar testing con Espresso y Kotlin.

Además se plantéa realizar el kata de dos formas, primero sin utilizar el Patrón robot y posteriormente refactorizar los tests para que utilicen el Patrón Robot.

De esta forma además prácticamos como se pueden limpiar los tests de aceptación de frameworks.

Este kata opcionalmente se puede empezar el primero.

Conclusiones

Con esta serie de katas practicarás kotlin mientras vas refactorizando una app existente utilizando buenas prácticas de desarrollo en Android.

Esto te ayudará a poder incorporar mejor estos nuevos conocimientos en tu día a día donde no solo creamos de 0 sino que lo más habitual es que trabajemos con código existente.

Más de XurxoDev
¡Genial! Te has inscrito con éxito.
Bienvenido de nuevo! Has iniciado sesión correctamente.
Te has suscrito correctamente a XurxoDev.
Su enlace ha caducado.
¡Éxito! Comprueba en tu correo electrónico el enlace mágico para iniciar sesión.
Éxito! Su información de facturación ha sido actualizada.
Su facturación no se actualizó.