Introduction to MVI Architecture on Android

Managing mobile application state might seem simple, but quickly becomes complex as an application grows. Over the years, many architectural patterns have emerged to help deal with this complexity. MVC, MVVM and MVP are three popular examples. MVI, or Model-View-Intent, is an evolution over these patterns. Inspired by functional and reactive programming practices, it features immutable state management and unidirectional data flow.

  • Content Author: Etienne Caron
  • Course Instructor: Etienne Caron
  • Level: Intermediate
  • Course Duration: 90 minutes
  • Sample Project Included: Yes
  • Learning Path: Android Architecture and Components

Course Description

Adopters of the MVI pattern report that business logic tends to be better formalized, which in turn improves code reuse. Also, many teams report that testing is more reliable, and bugs caused by race conditions or rogue mutations simply no longer tend to pop up. In this course, we’ll show you how to build a Model-View-Intent (MVI) Android App, using both Kotlin Coroutines and Kotlin Flows. You'll walk away understanding the core principles of this pattern, as well as its key benefits.

Drag to resize
By the end of the course you will have mastered:

  • Introduction to the MVI architecture
  • ModelsView and Intents
  • Putting all together 
  • Where to go from here

Meet the instructor

Drag to resize

Etienne Caron

Content Author & Course Instructor
About

Etienne is a software developer who's worked on all tiers (server, web, mobile and embedded) of large scale software platforms. Etienne has been an active member of the Android developer community in Montreal since 2010, and regularly devotes his time to mentoring startups, developers and students in the mobile space.

Mentoring has included various subjects, such as client-server architecture, Android design patterns, continuous integration, software development methodologies and general software design. He also gives regular talks on Android-related subjects.