Recientemente escuché e investigué sobre la arquitectura limpia y estoy tratando de implementarla por mi cuenta para entenderla profundamente, sé que el módulo de dominio (capa) tiene la lógica y debería tener algunas interfaces, así como casos de uso que usan los repositorios. Por lo que aprendí, la capa de Dominio no tiene acceso a ninguna otra capa, pero las capas de Datos y Presentación tienen acceso a la capa de Dominio pero no entre sí.
La definición de mis repositorios (interfaces) está en el módulo de dominio y su implementación está en el módulo de datos y luego los inyecta Dagger. Además, tengo algunos UseCases que inyectan algunos repositorios.
El problema que tengo es que el módulo de presentación tiene acceso a las interfaces y casos de uso de los repositorios, ya que ambos están en el módulo de dominio y se importan con gradle en la capa de presentación .
No creo que sea bueno tener acceso a ambos en el módulo de presentación , estoy usando Kotlin y la palabra clave interna para aislar las clases de cada módulo, pero como el módulo de datos necesita tener acceso a las interfaces de los repositorios para implementarlos, no puedo usar la palabra clave interna para ellos por lo que están expuestos ahora.
Mi pregunta es, ¿sería posible cambiar el diseño de alguna manera para exponer solo los casos de uso?
Si UseCase está relacionado con datos (p. ej., ReadUserUseCase ), entonces su interfaz debe permanecer en el módulo de domain y la implementación debe trasladarse al módulo de data .