Ahora en Android con Koin — Parte 3 | de Arnaud Giuliani | marzo 2023

Now In Android es una aplicación de Android de código abierto que cubre las mejores prácticas para el desarrollo moderno de Android. El proyecto es mantenido por el equipo de Android de Google. Sugiero continuar nuestro recorrido con eso. ejecución construido con el marco de inyección de dependencia de Koin. Este es un buen momento para actualizar las prácticas, desde la estructura de componentes estándar hasta casos más avanzados. para este articulo Ahora propongo usar Koin Annotations en lugar de Koin DSL para configurar la inyección de todos los componentes de la aplicación. Es interesante ver cuánto puede mejorar la experiencia de escritura. Prepárate, tenemos muchas cosas para ver juntos 👍 🚀 El marco de inyección de dependencia de Koin utiliza un DSL de Kotlin para declarar tus componentes. Esta es la forma estándar de declarar los componentes de su aplicación e inyectar todo desde ellos. Las anotaciones brindan otra forma de declarar cosas en su código: simplemente agregue una anotación a una clase para declararla en Koin. La experiencia del desarrollador es interesante porque finalmente, en lugar de abrir su archivo de configuración y agregar un nuevo componente, las cosas se detectan automáticamente. La idea no es reinventar la rueda como lo hacen las soluciones existentes como Dagger Hilt, sino hacerlo. proponer una nueva gran experiencia de desarrollador de Kotlin.No se preocupe, las anotaciones de Koin no reemplazan el DSL de Koin. Es una nueva forma complementaria de definir cosas dentro de su código Kotlin. El proyecto Koin Annotations consiste en un procesador de anotaciones impulsado por Google KSP y le permite Genere el DSL de configuración de Koin para usted.DSL vs Notas? En última instancia, es una cuestión de gusto y flujo de trabajo. La primera parte de la historia es configurar el proyecto actual con el complemento Google KSP Kotlin para que podamos usar anotaciones y compiladores de Koin. El proyecto de anotaciones de Koin está disponible desde el año pasado: https://blog.kotzilla.io/koin-annotations-1-0-now-stable/ El proyecto NowInAndroid (también conocido como Nia) tiene el complemento KSP ya configurado. Solo necesitamos usar la expresión alias(libs.plugins.ksp):Gradle KSP PluginUsémoslo con las siguientes dependencias de Gradle:Si necesita configurar el complemento KSP desde cero, puede hacerlo aquí Sigue nuestra página de configuración 👉 https://insertar-koin.io/docs/setup/anotaciones

El código generado por el complemento Koin KSP es realmente muy pequeño (una línea por componente declarado) y se puede depurar fácilmente, ya que es una configuración pura de Kotlin/Koin DSL. Era uno de nuestros requisitos principales: el impacto de compilación debe ser súper bajo 🤟

Ahora saltemos a nuestro código para usar anotaciones para crear nuestra configuración de Koin. Para declarar una clase como un componente Koin, Agregar una anotación Koin a esta clase. Usemos @Singleannotation para hacer de nuestra clase un singleton: @Singleclass OfflineFirstAuthorsRepository(private val authorDao: AuthorDao,private val network: NiaNetworkDataSource,) ¡Eso es todo! No es necesario especificar nada más 👍Se reconocen todos los tipos enlazados. Con nuestra anotación, tenemos el equivalente de la siguiente declaración DSL de Koin: singleOf(::OfflineFirstTopicsRepository) { bind() }Las anotaciones siguen la «semántica» de Koin: encontrará las mismas palabras clave entre DSL y anotaciones:

  • @Single — Declarar como singleton, equivalente a la palabra clave single
  • @Factory — Declarar como fábrica, equivalente a la palabra clave Factory
  • @KoinViewModel — Declarar como Android ViewModel, equivalente a la palabra clave viewModel

El complemento se Analizar el constructor y cualquier tipo heredado. También podemos detectar si su tipo es anulable para generar un acceso de dependencia anulable (gracias al operador de signo de interrogación):Detectar tipos anulables en constructores El complemento también detecta si está utilizando una lista o un tipo perezoso para usar la función koin correcta para obtener sus componentes. referencia/anotaciones-koin/definiciones Simplemente agregue una anotación a su clase y estará listo para comenzar. Es así de simple. Las definiciones de 👍Koin se recopilan en un módulo de Koin. Para definir un módulo Koin, cree una clase y coméntalo con @Module así:@Moduleclass AuthorKoinModulePuede usar el parámetro Incluye para especificar de qué otros módulos depende:@Module(incluye = [DomainKoinModule::class,StringDecoderKoinModule::class])class AuthorKoinModulePara asignar componentes a su módulo, tiene dos opciones:

  • buscar clases anotadas — considere cada clase anotada en el paquete dado
  • métodos de clase de módulo comentado — Cada función de clase anotada con módulos se considera un componente

Para escanear componentes, use la anotación @ComponentScan en tu modulo Escanear todas las definiciones para el paquete y los subpaquetes actuales:@Module@ComponentScanclass AuthorKoinModuleTambién puede especificar paquete Desea escanear:@Module@ComponentScan(«com.google.samples.apps.nowinandroid.feature.author»)class AuthorKoinModuleSi desea declarar una definición de una función, puede hacerlo comentando la función:@Moduleclass DatabaseKoinModule {@Singlefun database(context: Context) =Room.databaseBuilder(context, NiaDatabase::class.java, «nia-database»).build()} Entonces, ¿qué elegir? ¿Clase anotada o función anotada? 🤔Agregar una anotación a un componente existente es súper simple y directo. Pero es posible que deba declarar un componente en un:

  • La instancia se crea usando una API (como Room API Builder) o requiere una expresión
  • No se puede comentar la clase

También depende de cómo prefieras escribir. Verá lo fácil que es organizarse con sus componentes. 📖 Consulte la documentación de Koin para obtener más detalles: https://insert-koin.io/docs/reference/koin-annotations/modulesLas anotaciones de Koin generan su configuración de Koin para usted, para que pueda concentrarse en su aplicación y menos en sus herramientas. La API Verify también está disponible para cada módulo generado mediante el uso de la extensión verificar() en una extensión de módulo generada. // importación de contenido koin generado org.koin.ksp.generated.*@Testfun checkDataKoinModule() {DataKoinModule().modules. verificar(extraTypes = listOf(Context::class,))}Puede elegir DSL o Anotaciones y también mezclarlas según su necesidad y uso. No estás limitado a trabajar con una solución u otra. A continuación se muestra el siguiente ejemplo de un módulo DSL con módulos de clase anotados y un módulo DSL: ,DataKoinModule().module,// SyncWorker DSL ModulesyncWorkerKoinModule,TopicKoinModule().module,AuthorKoinModule().module,InterestKoinModule().module,SettingsKoinModule ().module,BookmarksKoinModule().module,ForYouKoinModule().module)viewModelOf (::MainActivityViewModel)}

Deja una respuesta

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