Kotlin interfaces mutantes

Buenas!

Hace ya casi un año que publiqué mi aplicación TopProfe para votar a los profesores de mi universidad y últimamente he decidido que es un buen momento para refactorizarlo y además, migrarlo a Kotlin.

Tras leerme el libro de @lime_cl, decidí ponerme manos a la obra y migrar la aplicación entera a Kotlin. Poco a poco iré escribiendo posts sobre las cosas chulas que he cambiado, y como ha mejorado el código con la introducción de Kotlin.

La primera feature de la que os quiero hablar es la posibilidad que Kotlin brinda para poder implementar métodos en las interfaces. También se pueden definir variables que más tarde sobreescribirá el que implemente dicha interfaz.

Imaginad la aplicación de TopProfe, que tiene varios listados de profesores, la interfaz que implementa la vista sería algo así en Java:

Los típicos métodos para añadir el listado de profesores al adapter correspondiente, y para navegar hasta el detalle de un profesor al hacer click sobre él. Todos los Fragments/Activities que implementen esta interfaz tendrán código repetido que es costoso mantener.

La solución que he adoptado en Kotlin para no repetir código, consiste en usar lo que he bautizado como ‘interfaces mutantes’ introduciendo en ellas código compartido entre todos los listados de profesores.

De esta forma, las vistas que tengan un listado de profesores tan solo tendrán que sobreescribir las dos variables de la interfaz, el Adapter y el Context necesario, y no tendrán código repetido. El adapter es uno genérico que me permite no tener que escribir un adapter para cada tipo de datos que quiera mostrar. En el siguiente post hablaré sobre cómo está implementado :).

En el caso de los listados de las asignaturas, la interfaz mutante queda de la siguiente manera. Si os dais cuenta, se vuelve a repetir código, y si el objetivo de esto es no hacerlo… ¿estoy ganando algo?

Cuando me di cuenta de que no era la solución más óptima, decidí ir un poco más allá. Como el Adapter está preparado para recibir genéricos, podría separar aún más las operaciones que hay que hacer para añadir elementos al Adapter. La solución es esta:

Así el código para añadir elementos al Adapter se escribe una sola vez, y la interfaces anteriores quedan de esta manera:

De momento este es el primer post de mis experiencias con Kotlin, pero pronto iré publicando más cositas :)!

Nos vemos!

Anuncios

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s