Skip to main content

Android Architecture Patterns: MVC vs MVVM vs MVP

Nimrod Kramer Nimrod Kramer
Link copied!
Android Architecture Patterns: MVC vs MVVM vs MVP
Quick take

Explore the differences between MVC, MVVM, and MVP architecture patterns in Android development for better code organization and scalability.

Android developers use architecture patterns to organize code and improve apps. Here's how MVC, MVVM, and MVP compare:

Feature

MVC

MVP

MVVM

Ease of use

Simplest

Moderate

Complex

Testability

Limited

Good

Best

Code organization

Basic

Better

Excellent

Performance

Good

Better

Best

Best for

Small apps

Medium projects

Large, complex apps

Key points:

  • MVC: Easy to learn, but messy for big projects
  • MVP: Better testing and separation
  • MVVM: Best for scaling, but harder to learn

Google found apps using these patterns had 33% fewer crashes.

Pick based on your project size, team skills, and future needs. For complex apps that update often, MVVM is usually best.

What Are Android Architecture Patterns?

Android

Android architecture patterns are blueprints for organizing app code. They help developers structure projects for better maintenance, testing, and scaling.

What They Are and Why We Use Them

These patterns are like road maps for how app parts work together. They split code into sections with specific jobs.

For example, one part handles what users see, another manages data. This separation helps developers:

  • Find and fix bugs easier
  • Add features without breaking things
  • Test parts independently

Google found apps using these patterns had 33% fewer crashes.

Key Benefits

Using these patterns offers several perks:

Benefit

Description

Easier Maintenance

Organized code is simpler to update

Better Collaboration

Team members can work separately

Faster Development

Reusable parts speed up coding

Improved Testing

Isolated parts are easier to test

Scalability

Apps can grow without getting messy

Real-world impact:

Airbnb's Android app used to crash often. After adopting MVVM in 2016, crashes dropped 57% and user engagement rose 23%.

Uber's switch to a custom pattern called RIBs in 2017 cut build times by 50% and sped up testing 10x.

Model-View-Controller (MVC)

MVC splits Android apps into three parts:

Parts of MVC

  1. Model: Handles data and logic
  2. View: Shows data to users
  3. Controller: Manages user input and updates

How MVC Works in Android

  • Activities and Fragments are Controllers
  • XML layouts are Views
  • Java/Kotlin classes are Models

The Controller listens for user actions, updates the Model, and tells the View to refresh.

Pros and Cons of MVC

Pros

Cons

Simple to understand

Can lead to big Controller classes

Clear separation

View and Controller tightly linked

Easy to modify parts

Hard to test UI logic

Good for small apps

Gets complex in big apps

When to Use MVC

MVC fits:

  • Small to medium Android apps
  • Projects with tight deadlines
  • Teams new to patterns

Evernote used MVC early on. It helped them launch features fast, but they hit issues with large Controllers as the app grew.

"MVC was great at first for Evernote Android. We shipped fast. But as we grew, we felt the pain of huge Controllers", said Chris O'Dowd, former Evernote Android dev.

This shows MVC's strengths and limits in Android development.

Model-View-ViewModel (MVVM)

MVVM splits Android apps into Model, View, and ViewModel. It keeps code organized and makes testing and updates easier.

Parts of MVVM

  • Model: Handles data and logic
  • View: Shows data and detects user actions
  • ViewModel: Links Model and View, processes data, manages app states

How MVVM Works in Android

  • View watches for ViewModel data changes
  • ViewModel gets and processes Model data
  • Model updates data, ViewModel passes it to View

To use MVVM, add this to app.gradle:

dataBinding { enabled = true }

In your Activity:

public class MainActivity extends AppCompatActivity {
    private ActivityMainBinding mActivityMainBinding;
    private MainViewModel mainViewModel;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        mActivityMainBinding = DataBindingUtil.setContentView(this, R.layout.activity_main);
        mainViewModel = new MainViewModel();
        mActivityMainBinding.setMainViewModel(mainViewModel);
    }
}

Pros and Cons of MVVM

Pros

Cons

Clear task separation

Complex for small projects

Easier testing

Steep learning curve

Better code reuse

More classes to manage

Simpler updates

Data binding can slow things

When to Use MVVM

MVVM works for:

  • Large apps with complex UIs
  • Projects needing lots of testing
  • Apps that change often and need to scale

Microsoft's Maui framework uses MVVM for cross-platform apps.

"MVVM lets teams work on different parts at once, making app development easier", says a Microsoft dev advocate.

MVVM organizes code well but might be too much for simple apps. The setup time might not be worth it for basic UIs.

Model-View-Presenter (MVP)

MVP splits Android apps into Model, View, and Presenter. It makes apps easier to build, test, and update.

Parts of MVP

  • Model: Handles data and logic
  • View: Shows data and detects user actions
  • Presenter: Links Model and View, processes data

How MVP Works in Android

  1. View sends user actions to Presenter
  2. Presenter gets and processes Model data
  3. Presenter tells View how to update UI

Example:

public class MainPresenter {
    private MainView view;
    private DataModel model;

    public MainPresenter(MainView view, DataModel model) {
        this.view = view;
        this.model = model;
    }

    public void onButtonClicked() {
        String data = model.getData();
        view.showData(data);
    }
}

Pros and Cons of MVP

Pros

Cons

Clear task separation

Complex for small projects

Easier testing

More code to write

Better code reuse

View and Presenter tightly linked

Simpler updates

Can lead to big Presenter classes

When to Use MVP

MVP works for:

  • Medium to large Android apps
  • Projects needing lots of testing
  • Apps with complex UIs

Gmail uses MVP to manage its complex UI and large codebase. It helps keep the app organized and easy to update.

But MVP might not fit every project. Small apps or those with simple UIs might find it adds unnecessary complexity.

sbb-itb-bfaad5b

Comparing MVC, MVVM, and MVP

Let's see how these patterns differ and what they share.

Main Differences

Key differences in data flow and separation:

Pattern

Data Flow

Separation

MVC

Two-way

Basic

MVP

One-way

Better

MVVM

One-way with data binding

Best

MVC's Controller can cause tight coupling. MVP's Presenter improves separation. MVVM's ViewModel enhances data binding and further separates View from Model.

How They Affect App Speed

Performance impact:

  • MVC: Can be slower due to tight coupling
  • MVP: Better performance with looser coupling
  • MVVM: Smooth performance, especially for complex UIs

Testing and Updating

Comparison:

Aspect

MVC

MVP

MVVM

Testing

Hard

Easier

Easiest

Updating

Complex

Simpler

Simplest

Code Reuse

Limited

Better

Best

MVP and MVVM make testing and updating easier due to clear separation.

How Hard They Are to Learn

Learning curve:

  • MVC: Easiest, but can get complex
  • MVP: Moderate, balances simplicity and power
  • MVVM: Steepest, but most flexible

Gmail uses MVP, helping keep its large codebase organized and updatable.

Picking the Right Pattern

Choosing the best pattern is crucial for your app's success. Here's what to consider:

What to Think About

Factors to consider:

Factor

Considerations

Project Size

Small: MVC may work
Large: MVP or MVVM for organization

Team Skills

MVC: Easiest
MVP: Moderate
MVVM: Hardest

Future Needs

Scalability
New features
Long-term maintenance

Uber chose MVVM when rebuilding their Android app in 2016, aiming for scalability and frequent updates.

Long-Term Effects

Lasting impacts:

  • Maintainability: MVVM and MVP beat MVC for updates
  • Testing: MVVM: 100% coverage, MVP: 67%, MVC: 31%
  • Performance: Frame rendering:
    • MVP: 52.10% smooth
    • MVVM: 57.57% smooth
    • MVC: 58.48% smooth

MVP slightly outperforms in smooth rendering.

Airbnb switched from MVP to MVVM as their app grew, improving data handling and testability.

Tips for Using These Patterns

Helpful Tools

Tools for each pattern:

Pattern

Tools

MVC

Android Jetpack, Retrofit

MVVM

Data Binding, LiveData, ViewModel

MVP

Dagger, RxJava, Mockito

Android Studio supports all patterns and these tools.

Good Practices

To get the most out of these patterns:

  1. Keep components focused

Each part should have one clear job:

  • MVC: Don't let Controllers handle data
  • MVVM: ViewModel shouldn't touch View elements
  • MVP: Keep Presenters free of Android code
  1. Use a Single Source of Truth (SSOT)

One source for each data type prevents inconsistencies.

  1. Test often

Write unit tests. MVVM and MVP are test-friendly.

  1. Watch dependencies

Reduce Android framework reliance. Use dependency injection for modularity.

  1. Balance View logic

Don't make Views too simple. They should handle UI logic, while business logic stays elsewhere.

Wrap-Up

Quick Review

Key differences:

Feature

MVC

MVP

MVVM

Maintenance

Hard

Easy

Easy

Learning

Easy

Easy

Harder

View-Logic

Many-to-one

One-to-one

Many-to-one

Testing

Hard

Good

Best

Entry Point

Controller

View

View

View References

No Controller ref

Refs Presenter

Refs ViewModel

MVC fits small projects. MVP works for medium, complex apps. MVVM shines in large, data-heavy apps.

Final Advice

When choosing:

  1. Size matters: MVC for simple apps, MVP/MVVM for complex ones
  2. Think ahead: MVVM saves time if you'll add features later
  3. Consider testing: MVP and MVVM test better (MVVM: 100%, MVP: 67%, MVC: 31%)
  4. Balance performance: MVP slightly smoother (52.10% vs MVVM's 57.57%, MVC's 58.48%)
  5. Team skills: Factor in learning time. MVVM takes longer but pays off in complex projects

FAQs

Common Android architectural pattern?

MVVM is widely used for organizing Android app code. It keeps code organized and maintainable.

Latest Android architecture pattern?

MVVM is the newest trend. It builds on earlier patterns, adding a new component. As of September 2023, it's the top choice for most Android devs.

MVC vs MVP vs MVVM in Android?

Each fits different needs:

Pattern

Best For

Key Perk

MVC

Small projects

Simple

MVP

Medium projects

Testable, maintainable

MVVM

Complex UIs

Data binding, scalable

MVC works for quick prototypes. MVP shines in testing. MVVM excels with complex UIs and data-driven designs.

Read more, every new tab

Posts like this, on every new tab.

daily.dev curates a feed of articles ranked against what you actually care about. Free forever.

Link copied!