🔩

[Android] Mobius Onboarding Guide

Mobius

Mobius is our recommended architecture for building Android applications. We also feel that it is much easier to learn Test-Driven Development by starting out to build apps using Mobius.

Day 1: Introduction to Mobius & TDD (4:50 hours)

  • Theory: Introduction to Mobius (1 hour)
    • Eliminating the moving parts using functional programming
    • Pure functions
    • State transition diagrams
    • Model & Event
  • Pairing Activity: The counter app state transition diagram (1 hour)
    • The update() function
    • Introducing the UpdateSpec class
    • Test driving the counter update() function
    • Wiring the update() function to the UI
  • Theory: Test-Driven Development (30 minutes)
    • Principles of TDD
    • YAGNI
    • The red, green, and refactor cycle
    • TDD as a design practice
  • Recap (20 minutes)

Day 2: Mobius Effects & Effect Handlers (5:05 hours)

  • Reflection of Day 1 and discussion around reading materials (30 minutes)
  • Pairing Activity: Login Screen update() Exercise (2 hours)
    • Introducing effects & effect handlers
    • Login example state transition diagram
    • Test driving the login update() function
    • Identifying the primitive obsession code smell (Watch this, Read this)
    • The “What to test?” problem
    • Relationship between the number of execution paths and tests
    • Test driving the Username and Password classes
    • Modeling async state transitions
    • Completing the update() function
  • Pairing Activity: Materializing effects using effect handlers (1:30 hours)
    • State verification vs. behavior verification
    • Introduction to Mockito
    • Low confidence behavior verification tests
    • Writing the first effect handler
    • Using the RxJava SubtypeEffectHandler
    • Action, Consumer, and ObservableTransformer
    • Errors of first-class citizens
    • Using Scheduler in tests
  • Pairing Activity: Introduction to Views and View Renderers (45 minutes)
    • Using mockito to verify view rendering logic
  • Recap (20 minutes)
    • Key takeaways

Day 3: Mobius, the final bits (5:35 hours)

  • Reflection of Day 2 (30 minutes)
  • Pairing Activity: Creating the shell (45 minutes)
    • Wiring all the Mobius components
    • Saving and restoring model state
    • The @Parcelize annotation
    • Caveats of saving data using Android’s Parcelable interface
  • Pairing Activity: Subtle bugs introduced by async operations (45 minutes)
    • Handling normal flow of execution using the init() function
    • Handling edge cases using the init() function
    • Using the InitSpec for testing normal flow and edge cases
  • Recap (20 minutes)

Day 4, 5, and (possibly 6): Building the NASA APOD Apps (14:50 - 22:50 hours)

  • Reflection of Day 3 (20 minutes)
  • Individual Activity: NASA APOD Application (8 - 16 hours)
    • Step 1: Drawing the state transition diagram
    • Step 2: Writing the init()the update() tests
    • Step 3: Writing Effect Handler tests
    • Step 4: View and View Renderer Tests
    • Step 5: Wire up the imperative shell
  • Code review and addressal (1:30 hours)
  • Recap (1 hour)

Points of Confusion

  • Effect are more closer to intention for side-effect than performing a side-effect
  • Representing decision making in state diagram

Lessons