¿Qué son los display models y cómo usarlos?

Gran parte de las aplicaciones que se desarrollan hoy en día disponen en algún momento de una lista, ya sea un RecyclerView en caso de Android o un TableView en caso de iOS. Esta lista contendrá una serie de bloques que debe mostrar información al usuario. Normalmente la forma de realizar esta tarea es pasar al elemento correspondiente una lista de objetos para que este seleccione los atributos que desee y los pinte. El problema viene cuando el objeto no dispone de la información formateada, es decir, con el formato que deseamos mostrar la información y, por tanto, dentro del propio adapter tenemos que realizar esta tarea.

Nota: Este post muestra ejemplos con Android aunque para iOS el concepto es igualmente válido.

Como podemos observar, dentro de la función onBindViewHolder se está formateando el texto que se va a mostrar. Esto tiene varios problemas: rendimiento y suciedad en el código.

Una solución posible es utilizar display models. Nos permiten formatear la información para que el adapter reciba los datos limpios y listos para mostrar. A continuación se muestra una forma de implementarlos y usarlos con listas.

Nota: Para ilustrar un caso concreto se va a implementar una lista de comics sobre un RecyclerView.

Comenzamos creando un Comic con los principales atributos que necesitamos.

Dejamos configurado el RecyclerView con su LayoutManager para que más tarde solo sea necesario añadirle el adapter. En este caso se trata de una lista vertical con dos columnas.

A continuación vamos a crear nuestro display model, en el cual se creará una lista de pequeños display models asociados a los comics, con los datos listos para ser pintados dentro del adapter.

Ahora que ya tenemos preparado el display model podemos refactorizar el adapter que escribimos al principio para que haga uso de este. Simplemente tenemos que cambiar la lista de comics que se recibía en el constructor por ComicsDisplayModel y en la función onBindViewHolder sustituir cómo se obtiene el comic y eliminar el formateo de la información. De esta forma tan simple conseguimos desacoplar la información.

Por último creamos este adapter y se lo pasamos al RecyclerView.

Conclusiones

De esta forma tan simple podemos tener por un lado el pintado de la información y por otro los datos limpios y preparados para ser usados por la vista.

Cualquier comentario o crítica es bienvenida :)