Carlos Fernando Arboleda Garces
Ingeniero en sistemas, Co-fundador y CTO de La Manicurista, Co-fundador de Mobile Lab, Co-organizador y speaker del GDG Cali, Mentor en la escuela DevHack
Carlos Arboleda
https://carlosarboleda.co
GDG Cali
Icons made by Pixel perfect from Flaticon
@cfarboleda
GDG Cali
Carlos Fernando Arboleda Garcés
GDG Cali
Cómo gestionas las dependencias en tu proyectos?
Nivel de experiencia
GDG Cali
Conceptualización
https://developer.android.com/jetpack/guide#recommended-app-arch
Arquitectura recomendada para aplicaciones Android
GDG Cali
Conceptualización
Iconos diseñados por Freepik
1. Inversión de control
2. Inversión de dependencias
3. Inyencción de dependencias
data class Harina(){
var store = Carulla()
}
data class Harina(
var store: Carulla
)
data class Harina(
var store: Carulla
)
data class Harina(
var store: Store
)
GDG Cali
Diagrama de clases del ejemplo
Pizza
Masa
Ingredientes
Harina
Agua
Aceite
Sal
Levadura
Salsa
Jamón
Piña
Queso
Peperoni
Collection
Creando dependencias manualmente
GDG Cali
val masa = Masa(
Harina(500),
Sal(10),
Levadura(20),
Aceite(50),
Agua(300)
)
val ingredients: List<Ingredient> = listOf(
Salsa(200),
Pina(400),
Jamon(30),
Queso(300),
)
val pizza = Pizza("Hawaiana", masa, ingredients)
Creando dependencias manualmente
GDG Cali
const api = new Api(new AxiosRequestClient());
const authSpotify = new AuthSpotify(api);
const authUseCase = new AuthUseCase(authSpotify);
const getAllAlbumsByArtistIdSpotify = new GetAllAlbumsByArtistIdSpotify(api);
const getAllAlbumsByArtistIdUseCase = new GetAllAlbumsByArtistIdUseCase(
getAllAlbumsByArtistIdSpotify
);
const getSongsByAlbumIdSpotify = new GetSongsByAlbumIdSpotify(api);
const getSongsByAlbumIdUseCase = new GetSongsByAlbumIdUseCase(
getSongsByAlbumIdSpotify
);
const deleteAllSongsMongodb = new DeleteAllSongsMongodb(database);
const deleteAllSongsUseCase = new DeleteAllSongsUseCase(deleteAllSongsMongodb);
const repository = new SaveSongsMongodb(database);
const useCase = new PopulateUseCase(
repository, authUseCase, getAllAlbumsByArtistIdUseCase,
getSongsByAlbumIdUseCase, deleteAllSongsUseCase
);
await useCase.exec(...);
Inyectando dependencias mediante un contenedor de dependencias
GDG Cali
Dagger ¬
Dagger Hilt ¬
Koin
👑
Qué es Dagger Hilt?
GDG Cali
Es una librería de inyección de dependencias construida sobre Dagger que provee una forma estándar para incluir Dagger en una aplicación Android
https://developer.android.com/training/dependency-injection/hilt-android#hilt-and-dagger
Por qué nace Dagger Hilt?
GDG Cali
Qué ventajas ofrece Dagger Hilt?
GDG Cali
Dagger Hilt core API
GDG Cali
https://dagger.dev/hilt/components
Components and scopes
Dagger Hilt core API
GDG Cali
https://dagger.dev/hilt/components
Otras anotaciones importantes
A codear...
GDG Cali
GDG Cali
Conclusiones
GDG Cali
Referencias
@cfarboleda
By Carlos Fernando Arboleda Garces
Cuando hablamos de aplicaciones escalables y tolerantes al cambio no podemos evitar tener en cuenta la inyección de dependencias, puesto que es uno de los elementos fundamentales cuando queremos respetar las responsabilidades de las entidades sin enloquecer mientras manejamos manualmente las dependencias
Ingeniero en sistemas, Co-fundador y CTO de La Manicurista, Co-fundador de Mobile Lab, Co-organizador y speaker del GDG Cali, Mentor en la escuela DevHack