Skip to content

Instantly share code, notes, and snippets.

@vinaysshenoy
Last active November 29, 2022 16:31
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save vinaysshenoy/31ede0981a9fa88fff84b16c51352513 to your computer and use it in GitHub Desktop.
Save vinaysshenoy/31ede0981a9fa88fff84b16c51352513 to your computer and use it in GitHub Desktop.
Onion layers
interface Provider<T, U> {
fun provide(params: U?): T
}
class DatabaseProvider: Provider<User, string> {
override fun provide(id: string?): User {
// Query DB here
}
}
class CachingProvider<T, U>: Provider<T, U>(
private val source: Provider<T, U>
) {
private cache: Map<U, T>
override fun provide(params: U?): T {
// Check and update cache
}
}
class FetchUser(private val provider: Provider<User, string>) {
}
val provider = CachingProvider(DatabaseProvider())
val fetchUser = FetchUser(provider)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment