Generalidades

Patrones de decorador en el desarrollo de Android | Autor: Dens Rebrov | Octubre de 2021

Rebrov

Decorator es un gran patrón, en muchos casos, puede separar mejor parte de la lógica de empaquetado o de acompañamiento de la parte central del sistema.

Decorador Tipo de abstracción al mismo tiempo:

  • Tipo de abstracción (Implementar su interfaz)

Entonces, el decorador se puede envolver Tipo de abstracción Comportamiento y agregue algo de lógica antes y después de su método de destino.

Puedes leer más sobre decoradores aquí.

🌲 Decoradores en Kotlin

Kotlin nos permite usar decoradores de una manera conveniente y concisa a través del uso de delegación by Palabras clave.

abstract class AbstractType 
abstract fun
foo()
abstract fun bar()
class Decorator(target: AbstractType): AbstractType by target
//no errors regardless of AbstractType unimplemented members

El uso de delegados nos permite omitir la cobertura de todos los miembros abstractos, lo que hace que nuestro código sea más limpio.

💉 Decorador con DI

Decoración unoUna especie deLa ventaja de tor es que puede definir dónde usar objetos de clase primitivos, decoradores o pilas de decoradores mediante la inyección de dependencias.

DI facilita el control de este comportamiento y separa el código relacionado con el decorador de la lógica central y lo conecta solo en el módulo DI.

Veamos como daga ¡Le permite decorar la diferencia en el proyecto mientras mantiene el proveedor original!

Puede definir un proveedor independiente y el proveedor decorado debe usar anotaciones. @Named Notas con algunos calificadores de cadena.

Si nunca antes ha usado @Named, puede leerlo aquí.

@Module
abstract class FooModule
@Binds
abstract fun provideFoo(foo: FooDefaultImpl): IFoo

@Module
class FooDecoratorModule
@Provides
@Named(NAMED_KEY)
fun provideFoo(foo: IFoo): IFoo
return FooDecorator(original)

companion object
const val NAMED_KEY = "Foo Decorator"

Luego, si tiene que usar variaciones decorativas en algunas clases, solo necesita agregar @Named(NAMED_KEY) El calificador de la variable inyectada.

class Bar @Inject constructor(
@Named(NAMED_KEY) private val foo: IFoo
)
//use decorated foo below

Además, podemos agregar o eliminar @Named Anota para usar diferentes objetos de decoración en diferentes contextos.

LEER  Cuadro de diálogo Hoja inferior en pantalla completa.Este artículo es una forma directa ... | Autor Owais Idris | Julio 2021

Publicaciones relacionadas

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Botón volver arriba