Showcase project of Functional Reactive Programming on Android, using RxJava.

Overview

FunctionalAndroidReference

FunctionalAndroidReference is a showcase project of Functional Reactive Programming on Android, using RxJava.

It's a companion app to the presentation "Fully Reactive Apps" at Droidcon UK 2016.

Build Status codecov

It is not meant to be a canonical reference, but as an example of how far functional programming can be taken. It's also a collection of patterns and ideas about how to express use cases, business features, and UX on a FRP paradigm.

The project has multiple self-imposed limitations:

Full separation between UI and business logic.

The project is split into several modules. Every module has its own README file.

app

The UI layer is written purely in Java 7 with Android dependencies.

It depends on all modules below.

liblogic

The business logic that controls the views. It doesn't contain any Android dependency.

It is written in Kotlin for convenience, but it could be rewritten in Java 7 with ease, although it will be a bit verbose without lambdas (see retrolambda).

It depends on the modules below.

libservices

Any network services, POJOs, and communications that aren't in the Android framework. Again, it's not dependent on any Android.

Written in Kotlin too.

It depends on the module below.

libcore

Helpers and common general types. No Android.

Written in Kotlin, with no Android dependencies.

Pragmatically functional

  • liblogic and libservices must contain as few classes as pragmatically possible. Favour functions instead.

  • Every function must be written as an expression body.

  • Every function must be as pure as possible.

  • Every parameter in a function must be passed explicitly. No globals, no fields.

  • Prefer encapsulating variables in closures rather than fields. If using fields, final fields will be mandated whenever possible.

  • Collections must be immutable.

  • No nullable types outside the UI and service layers.

  • Use functional patterns like unions, laziness, or higher order functions, instead of classic OOP Gang of Four patterns.

Fully reactive

The architecture is reminiscent of Flux, Redux, or Elm. This is no coincidence.

Every method in the UI layer is either:

  • a stream/signal, represented by a method returning an rx.Observable.

  • a new UI state: new text value, new element on a RecyclerView, show a dialog... represented by a void/Unit method.

Every function in the business layer is:

  • a rx.Subscription encompassing all the behaviour for one or many use cases.

Testable

Every use case must be accompanied of a test suite covering its complete behaviour.

Moderately documented

Every public function must be documented.

Inlined comments only when intent isn't clear.

No lifecycle

Separate the business logic from the Android lifecycle at the earliest layer possible.

No magic

Avoid DI frameworks like Dagger, and hand-roll injection instead.

Avoid code generation outside Kotlin helpers.

License

Copyright (c) pakoito 2016

The Apache Software License, Version 2.0

See LICENSE.md

You might also like...
My personal template for a Spring Boot REST reactive webapp

My personal spring boot kotlin reactive template Features Spring Security implementation with JWT access and refresh token MongoDB database Project Co

Reactive setup with Spring WebFlux , Kotlin, Postgres and Spring Data R2DBC

Reactive Spring with Kotlin and Pg Spring WebFlux with Netty instead of Spring Web with Tomcat Mono and Flux in all layers (controller, service, repo)

Event-driven application uses React, reactive Spring Boot WebFlux, R2DBC, MySQL and Liquibase

Product delivery Event-driven application uses React, reactive Spring Boot WebFlux, R2DBC, MySQL and Liquibase Status: IN PROGRESS if [[ "" != `docker

Modular Android architecture which showcase Kotlin, MVVM, Navigation, Hilt, Coroutines, Jetpack compose, Retrofit, Unit test and Kotlin Gradle DSL.

SampleCompose Modular Android architecture which showcase Kotlin, MVVM, Navigation, Hilt, Coroutines, Jetpack compose, Retrofit, Unit test and Kotlin

An Android application to showcase dog images
An Android application to showcase dog images

DogApp An Android application to showcase dog images. The application allows users to see random dog images or random dog images by breed.The user can

A small application for working with the Github API, made as a practical task. GeekBrains, course of study: Popular libraries: RxJava 2, Dagger 2, Moxie.
A small application for working with the Github API, made as a practical task. GeekBrains, course of study: Popular libraries: RxJava 2, Dagger 2, Moxie.

GeekBrains_Course_AndroidOnKotlin_HW_My_Movie Домашнее задание к занятию №2-6 Студента GeekBrains Веремеенко Дмитрия Факультет: Android-разработки Кур

Kotrlin Programming Language Cross-Platform Development which includes Android, iOS and Backend. Pretty much everwhere.
Kotrlin Programming Language Cross-Platform Development which includes Android, iOS and Backend. Pretty much everwhere.

Kotlin-Everywhere: Kotlin Programming Language Cross-Platform Development This is still a WIP but the idea is to create a tiny KOTLIN project that cou

101 examples for Kotlin Programming language.

This is a collection of runnable console applications that highlights the features of Kotlin programming language. The use of console application enab

Life is too short for Bash programming
Life is too short for Bash programming

A starter project to build command-line tools in Kotlin Multiplatform Contains a re-implementation of a real world CLI tool: git-standup Installation

A functional, fractional-byte programming language

Fig A functional, fractional-byte programming language. Tired of annoying Unicode codepages in your favorite golfing languages? Fig uses pure, printab

null 10 Dec 15, 2022
Repo: Programming problems with solutions in Kotlin to help avid Kotlin learners to get a strong hold on Kotlin programming.

Kotlin_practice_problems Repo: Programming problems with solutions in Kotlin to help avid Kotlin learners to get a strong hold on Kotlin programming.

Aman 0 Oct 14, 2021
Sample Ktor app using a functional stack

samstack This is a template project you can clone and use as a basis for your own Kotlin based microservices. This application structure is my persona

Sam 6 Nov 16, 2022
Sample Ktor app using a functional stack

samstack This is a template project you can clone and use as a basis for your own Kotlin based microservices. This application structure is my persona

Sam 18 Jul 21, 2022
A project to learn about Reactive Microservices experimenting with architectures and patterns

reactive-microservices-workshop Copyright © 2021 Aleix Morgadas - Licenced under CC BY-SA 4.0 A project to learn about Reactive Microservices experime

Aleix Morgadas 7 Feb 21, 2022
A sample skeleton backend app built using Spring Boot kotlin, Expedia Kotlin Graphql, Reactive Web that can be deployed to Google App Engine Flexible environmennt

spring-kotlin-gql-gae This is a sample skeleton of a backend app that was built using: Spring Boot(Kotlin) Reactive Web Sprinng Data R2DBC with MYSQL

Dario Mungoi 7 Sep 17, 2022
A showcase music app for Android entirely written using Kotlin language

Bandhook Kotlin This project is a small replica of the app I developed some time ago. Bandhook can still be found on Play Store At the moment it will

Antonio Leiva 1.9k Dec 23, 2022
Android MVVM Architecture using Kotlin, RxJava, Koin.

Android-MVVM-RxJava-Digikala_kotlin Digikala sample app developed MVVM architecture design pattern that follow the best practices of Object Oriented D

Hossein Soltani Nejad 2 Sep 10, 2022
It is a project that contains lessons and examples about Kotlin programming language. 🇰

Kotlin Tutorials What is Kotlin? I added the platforms it supports and great resources. You can access the article from the link below: https://medium

Halil Özel 94 Dec 22, 2022
A coding examples project about Kotlin Programming language. 🇰

Kotlin Tutorial ????‍?? What is Kotlin ❓ Kotlin is a new programming language, developed by JetBrains. Jetbrains is a popular software development com

Mustajab Ikram 4 Oct 11, 2022