Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

311
Vistas
¿Qué es mejor poner la llamada de Coroutine en el Repositorio o en ViewModel?

Solo me preguntaba la opinión de los demás. Tengo 2 formas en que puedo hacer algo y tenía curiosidad por saber cuál es mejor (y con suerte por qué piensas eso)

Tengo 2 archivos WordRepository y WordViewModel. Puedo hacer las corrutinas en el Repo o en ViewModel en ambos sentidos, pero espero que alguien pueda darme una pista de por qué haría las corrutinas en uno u otro y viceversa.

Versión A. (Donde está la corrutina en el Repo)

 WordRepo: class WordRepository(private val wordDao: WordDao): WordRepo { @WorkerThread override suspend fun deleteAllLogsOlderThan(XDays: Int): Int = withContext(IO) { return@withContext wordDao.deleteAll() } } WordViewModel: class WordViewModel(private val wordRepository: WordRepo) : ViewModel() { fun deleteAllLogsOlderThanA(XDays:Int): Int = runBlocking { wordRepository.deleteAllLogsOlderThan(XDays) } }

Versión B. (Donde está la corrutina en ViewModel)

 Word Repo: class WordRepository(private val wordDao: WordDao): WordRepo { @WorkerThread override suspend fun deleteAllLogsOlderThan(XDays: Int): Int = wordDao.deleteAll() } WordViewModel: class WordViewModel(private val wordRepository: WordRepo) : ViewModel() { fun deleteAllLogsOlderThanA(XDays:Int): Int = runBlocking { withContext(IO) { wordRepository.deleteAllLogsOlderThan(XDays) } } }
over 4 years ago · Santiago Trujillo
2 Respuestas
Responde la pregunta

0

Sinceramente, creo que cualquier forma está bien, pero si tengo que elegir, prefiero mantener el código relacionado con el hilo en la capa del repositorio. ( Versión A en el ejemplo)

Mi justificación:

(A) Los modelos de vista no deben asumir cómo funcionan internamente los repositorios. La versión B implica que el modelo de vista asume que el repositorio se ejecutará en el subproceso de llamada.

(B) Además, el repositorio no debe depender de otros componentes para usar un hilo específico para llamar a su método. El repositorio debe estar completo por sí mismo.

(C) Para evitar la duplicación de código. Tener varios modelos de vista llamando a un método de repositorio es una situación muy común. La versión A gana en este caso porque solo necesita Corountine en un lugar, el repositorio.


Sugiero mirar algunos de los ejemplos de Google para ver dónde les gusta manejar Coroutine y los códigos de subprocesamiento de acceso a datos.

  1. Sunflower usa el código Coroutine en su repositorio. Esto probablemente sea particularmente útil para usted porque incluye ejemplos del tipo de solicitudes de disparar y olvidar.

  2. GitHubBrowserRepo no usa Coroutine pero el repositorio mantiene una referencia a las instancias de Executor que se usan al acceder a los datos.

over 4 years ago · Santiago Trujillo Denunciar

0

La pregunta es dónde especificar que los trabajos del repositorio deben ejecutarse en grupos de subprocesos de IO:

  • A) En Repositorio
  • B) En ViewModel

Francamente, no estoy seguro de qué manera es mejor.

B) Tenerlo en ViewModel significa más transparencia de lo que se ejecuta en qué subproceso. Esta es también la forma en que trabajé principalmente con RxJava. Como aspecto negativo, su ViewModel estará abarrotado de cambios de subprocesos (withContext()), mientras que en realidad es obvio que todo el trabajo del repositorio debe ejecutarse en el subproceso de fondo. Entonces, ¿es útil esta información adicional?

R) Tenerlo en el Repositorio significa más flexibilidad con respecto al cambio de subprocesos en el repositorio y un código más limpio en ViewModel. El código será menos explícito desde el punto de vista de ViewModel sobre los hilos. Como negativo, todos los métodos de repositorio deberán suspenderse, por lo que solo se pueden usar desde coroutines.

over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda