Diseño arquitectonico - sjfuentes-uniandes/ing-sw-app-moviles GitHub Wiki

Diagramas de arquitectura

Diagrama de clases

Diagrama de componentes

Diagrama de paquetes

Capas

Model Layer (Modelo)

Responsabilidad: Gestión de datos, persistencia y lógica de negocio

Componentes:

  • Album.kt - Entity class con anotaciones Room para álbum
  • Collector.kt - Entity class con anotaciones Room para coleccionista
  • Artist.kt - Entity class con anotaciones Room para artistas
  • NetworkServiceAdapter.kt - Servicio para comunicación con API REST
  • VinilosRoomDatabase.kt - Base de datos local Room
  • AlbumsDao.kt - Interface DAO para operaciones de álbumes
  • CollectorsDao.kt - Interface DAO para operaciones de coleccionistas
  • ArtistsDao.kt - Interface DAO para operaciones de artistas.

Repository Layer (Repositorio)

Responsabilidad: Coordinación entre fuentes de datos locales y remotas

Componentes:

  • AlbumRepository.kt - Gestiona cache local y sincronización de álbumes
  • CollectorRepository.kt - Gestiona cache local y sincronización de coleccionistas
  • ArtistsRepository.kt - Gestiona cache local y sincronización de artistas

ViewModel Layer (Modelo de Vista)

Responsabilidad: Lógica de presentación y comunicación entre View y Repository

Componentes:

  • AlbumViewModel.kt - Gestiona lista de álbumes, estados de carga y errores de red
  • CollectorViewModel.kt - Gestiona lista de coleccionistas, estados de carga y errores de red
  • ArtistsViewModel.kt - Gestiona lista de artistas, estados de carga y errores de red
  • HomeViewModel.kt - ViewModel básico con texto estático
  • DashboardViewModel.kt - ViewModel básico con texto estático
  • NotificationsViewModel.kt - ViewModel básico con texto estático
  • ArtistDetailViewModel.kt - Gestiona el estado del artista individual, carga de datos y manejo de errores de red para la vista de detalle

View Layer (Vista)

Responsabilidad: Interfaz de usuario y presentación

Componentes:

  • MainActivity.kt - Actividad principal con navegación bottom navigation
  • HomeFragment.kt - Fragmento de página principal con botones de navegación
  • AlbumsFragment.kt - Fragmento que muestra lista de álbumes con pull-to-refresh
  • CollectorsFragment.kt - Fragmento que muestra lista de coleccionistas con pull-to-refresh
  • ArtistsFragment.kt - Fragmento que muestra la lista de artistas con pull-to-refresh
  • DashboardFragment.kt - Fragmento básico para artistas (placeholder)
  • NotificationsFragment.kt - Fragmento básico para usuarios (placeholder)
  • AlbumsAdapter.kt - Adaptador RecyclerView con data binding para álbumes
  • CollectorsAdapter.kt - Adaptador RecyclerView con data binding para coleccionistas
  • ArtistsAdapter.kt - Adaptador RecyclerView con data binding para artistas
  • ArtistDetailFragment.kt - Fragmento que muestra los detalles completos de un artista seleccionado
  • FragmentArtistDetailBinding - Binding para fragment_artist_detail.xml

Interfaces y Componentes Intermedios

UI ↔ ViewModel

  • LiveData: Observable data streams para cambios reactivos
  • ViewBinding: Binding automático de componentes UI
  • Factory Pattern: Creación de ViewModels con dependencias
  • Observer Pattern: Observación de cambios en LiveData

ViewModel ↔ Repository

  • Repository Pattern: Abstracción de fuentes de datos
  • Result: Wrapper para operaciones success/failure
  • Coroutines: Manejo asíncrono con suspend functions
  • ViewModelScope: Lifecycle-aware coroutine scope

Repository ↔ Data Sources

  • DAO Interfaces: Abstracción de operaciones de base de datos
  • NetworkServiceAdapter: Wrapper para llamadas HTTP
  • Dispatchers.IO: Threading para operaciones I/O
  • suspendCoroutine: Conversión de callbacks a suspend functions

Data Layer

  • Room Database: ORM para persistencia local
  • Entity Annotations: @Entity, @PrimaryKey, @Dao
  • LiveData: Streams reactivos desde base de datos
  • Volley: Cliente HTTP para API calls

Flujo de Datos Offline-First

View → ViewModel → Repository → [DAO + NetworkAdapter] → API/Database
View ← ViewModel ← Repository ← [DAO + NetworkAdapter] ← API/Database
  1. View solicita datos al ViewModel
  2. ViewModel solicita datos al Repository
  3. Repository retorna LiveData del DAO (datos cacheados)
  4. View muestra datos inmediatamente
  5. Repository sincroniza con API en background
  6. Repository actualiza DAO con datos frescos
  7. LiveData notifica cambios automáticamente
  8. View se actualiza con datos frescos

Manejo de Errores y Estados

  • Sin Internet: App funciona con datos cacheados
  • Error de Red: Se muestra mensaje, datos cacheados permanecen
  • Cache Vacío: Se muestra loading hasta recibir datos de API
  • Pull-to-Refresh: Fuerza sincronización con API
  • Cache Invalidation: deleteAll() + insertAll() para datos frescos

Tecnologías

  • Kotlin - Lenguaje de programación
  • Android Architecture Components - LiveData, ViewModel, Navigation
  • Volley - Cliente HTTP para API REST
  • Glide - Carga de imágenes
  • Data Binding - Vinculación de datos en layouts
  • Material Design - Bottom navigation y componentes UI