Se trata de cómo resolver los siguientes problemas:
1- Configuración de diferentes environments.
2- Manejo de caching - sincronización de data con el servidor.
7. Diferentes
Ambientes de
desarrollo
¿Por
qué?
● Permitir trabajo en paralelo de desarrollo y
pruebas.
● Ahorra tiempo en configuraciones posteriores.
● Facilitar los cambios grandes para nuevos
requerimientos.
● Diferenciación de errores (data, casos
especiales, etc).
● No malograr la data de pruebas durante el
desarrollo.
● Evitar problemas de pruebas en producción.
● Distribución para grupos específicos de
testers.
21. Caché y
Sincronización
de Data
¿Por
qué?
● Mejora la experiencia de usuario.
● Permite tener la data actualizada.
● Puede optimizar el uso el uso de internet para
la aplicación.
● Permite información en modo offline.
● Permite realizar procesos en modo offline.
23. Caché y
Sincronización
de Data
Tipos
Sincronización
● Sincronización asíncrona.
● Sincronización sincronico.
Almacenamiento de data
● Almacenamiento parcial
● Almacenamiento total
https://www.dre.vanderbilt.edu/~schmidt/PDF/PatternPaperv11.pdf
29. https://github.com/VictorAlbertos/RxCache
RxCache
public class Repository {
private final Providers providers;
public Repository(File cacheDir) {
providers = new RxCache.Builder()
.persistence(cacheDir, new GsonSpeaker())
.using(Providers.class);
}
public Observable<List<Mock>> getMocks(final boolean update) {
return providers.getMocksEvictProvider(getExpensiveMocks(), new EvictProvider(update));
}
public Observable<List<Mock>> getMocksPaginate(final int page, final boolean update) {
return providers.getMocksPaginateEvictingPerPage(getExpensiveMocks(), new DynamicKey(page), new
EvictDynamicKey(update));
}
public Observable<List<Mock>> getMocksWithFiltersPaginate(final String filter, final int page, final boolean updateFilter)
{
return providers.getMocksPaginateWithFiltersEvictingPerFilter(getExpensiveMocks(), new DynamicKeyGroup(filter, page),
new EvictDynamicKey(updateFilter));
}
//In a real use case, here is when you build your observable with the expensive operation.
//Or if you are making http calls you can use Retrofit to get it out of the box.
private Observable<List<Mock>> getExpensiveMocks() {
return Observable.just(Arrays.asList(new Mock("")));
}
}