Skip to content

Instantly share code, notes, and snippets.

@SabagRonen
Created January 13, 2018 19:52
Show Gist options
  • Save SabagRonen/8852311a8f3cee86a5c2d2c87690f4b8 to your computer and use it in GitHub Desktop.
Save SabagRonen/8852311a8f3cee86a5c2d2c87690f4b8 to your computer and use it in GitHub Desktop.
Clean Architecture and Kotlin Coroutines post loading image use case
data class LoadImageUseCaseRequest (
val key: String,
val storage: Storage,
val imageFetcher: ImageFetcher
)
data class LoadImageUseCaseResponse (val bitmap: Bitmap)
class LoadImageUseCase : UseCase<LoadImageUseCaseRequest, LoadImageUseCaseResponse> {
override fun handleRequest(request: LoadImageUseCaseRequest) : LoadImageUseCaseResponse {
val url = request.storage.getUrlForKey(request.key)
val image = request.imageFetcher.getImageFromUrl(url)
return LoadImageUseCaseResponse(image)
}
}
class Model {
@Inject lateinit var useCaseRunner: UseCaseRunner<LoadImageUseCaseRequest, LoadImageUseCaseResponse>
@Inject lateinit var imageFetcher : ImageFetcher
@Inject lateinit var storage: Storage
fun fetchUseCase(storageKey: String) {
val request = LoadImageUseCaseRequest(storageKey, storage, imageFetcher)
val useCase = LoadImageUseCase()
useCaseRunner.runUseCase(useCase, request, object : UseCaseResponseHandler<LoadImageUseCaseResponse> {
override fun handleResponse(response: LoadImageUseCaseResponse) {
doSomthingWithResponse(response)
}
})
}
private fun doSomthingWithResponse(response: LoadImageUseCaseResponse) {
....
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment