Skip to content

Latest commit

 

History

History
31 lines (18 loc) · 1.51 KB

README.md

File metadata and controls

31 lines (18 loc) · 1.51 KB

Giphy Trend

Sample Android app showing list of trending gifs from giphy.com written entirely on Kotlin.

In order to function properly this app requires valid Giphy API key. You can obtain one here. Replace API_KEY in gradle.properties with your key.

Architecture

This app uses adapted Redux architecture combined with Reactive Extensions framework RxJava.

Core principles:

Every Activity has it's own State and Store. Activity uses ViewBinder to bind View with the Store by dispatching actions from View to Store and render State on View when it changes.

Reducers are not allowed to perform side effects, it is an interface with a single function:

fun reduce(state: State, action: Action): State

Since there are no side effects in Reducers there is a special component designed exactly for this - Middleware. In this project Middleware API differs a bit from tradional Redux Middleware API. Middleware interface has single create function:

fun create(actions: Observable<Action>, state: Observable<State>): Observable<Action>

It accepts 2 "streams" - Action and State and returns "stream" of Action. This way it has an ability to react to incoming Actions and State changes and emit new Actions. Middleware is designed with asynchronous operations in mind, but you can perform synchronous operations as well.

License

MIT