La herramienta de inyección de dependencia más fácil con divertidas interfaces de Kotlin y clases selladas | de Alexei Cherniaev | noviembre 2022

Foto de Pixabay Desarrollamos la nueva biblioteca de Android de código abierto en Appodeal Stack y no podemos agregar muchas bibliotecas de terceros. La inyección de dependencia es un patrón de diseño útil que resulta útil en la codificación diaria. No voy a discutir los pros y los contras de su uso, hay infinidad de artículos sobre este patrón. El objetivo era crear una herramienta útil para mis compañeros y para mí, y también mostraré cómo lo logré. Me inspiré en el impresionante marco Koin DI que he usado en mis proyectos favoritos. De cara al futuro, diría que el resultado del marco DI son casi 90 líneas de código. ¡Vamos! Como mencioné anteriormente, me gusta el estilo Koin por su simplicidad y rectitud. Entonces, al final, declarar el módulo DI debería verse así: Donde A, B y C son interfaces y clases simples: Y para obtener sus instancias, quería usar esta API: En el primer paso, describamos los tipos de las instancias requeridas. Podrían ser fábricas y singletons. En mis casos, las fábricas pueden ser con y sin parámetros dinámicos. Así que tengo tres tipos genéricos: Factory, ParamFactory y Singleton. Vamos a crear interfaz sellada InstanceType y describir nuestros tipos genéricos. fábricas de llamadas Construir diversión (): T Cada vez que necesitamos una nueva instancia de su clase. Para singletons solo necesitamos una instancia, por lo que usamos Val Instancia: T También el uso de un perezoso-delegate ayuda a evitar la creación de una instancia inmediatamente. Kotlin garantiza que Lazy es seguro para subprocesos, por lo que no tenemos que preocuparnos por la sincronización.Interfaces divertidas (o Single Abstract Method) es el nuevo azúcar de Kotlin. El siguiente núcleo muestra la diferencia.1. regular interfaz Declaración e implementación:2. interfaz divertida Declaración e implementación: Como puede ver, las interfaces solo pueden tener una función método divertido () (porque es un único método abstracto 😀). Aquí puede encontrar más información sobre las interfaces funcionales. El siguiente paso es guardar todas las fábricas y singletons. Es un tarjetero sencillo. Dos puntos aquí:

  1. Al agregar un nuevo Fábrica Compruebo si ya se ha agregado una fábrica para esta clase para evitar malentendidos en la definición múltiple.
  2. Que objeto interno SimpleDiStorage marcado con @PublicadoApi Anotación. Este objeto se presenta en un módulo separado, pero lo usa en línea Función. No hacer SimpleDiStorage público lo marcamos con @CastigadoApi y además, no podemos usar nuestras funciones solo en su módulo.

Vamos a crear una función de orden superior para esto: simplemente recupere la instancia de la memoria. Como tenemos tres tipos de fábricas, creemos tres funciones para agregar cada tipo a la tienda SimpleDiScope directo no es bonito, así que escribamos un nuevo orden superior divertida módulo para usarlo como DSL. Eso es todo. Ahora podemos declarar y usar fábricas. Inyección de dependencia simple. Por supuesto, la funcionalidad de Koin and Dagger es mucho más amplia, pero este DI simple cubre la mayoría de los casos, cuesta 90 líneas de código y no utiliza bibliotecas de terceros. Este SimpleDi podría ampliarse fácilmente para sus necesidades, por ejemplo, para crear instancias con ámbito o para implementar algo como instancias en caché LRU para no mantener un singleton cuando no esté en uso. All in One está aquí en Github.

Deja una respuesta

Tu dirección de correo electrónico no será publicada.