Skip to content

Commit

Permalink
Add post about MVC MVP MVVM
Browse files Browse the repository at this point in the history
  • Loading branch information
freedomlewis committed Apr 22, 2024
1 parent 9892d54 commit 4387431
Showing 1 changed file with 81 additions and 0 deletions.
81 changes: 81 additions & 0 deletions _posts/2024-04-22- MVC-MVP-MVVM.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,81 @@
---
title: Building Your Android App (MVC vs. MVP vs. MVVM) - A Smackdown
date: 2024-04-12 12:29:00 +0800
categories: [Tech]
tags: [Architecture, Android]
render_with_liquid: false
---


The realm of Android app development empowers you to craft exceptional applications. But with this power comes a crucial decision: selecting the right architectural pattern. Three prominent contenders in this arena are MVC (Model-View-Controller), MVP (Model-View-Presenter), and MVVM (Model-View-ViewModel). Each offers distinct advantages and caters to projects of varying complexity. Let's delve into their functionalities to determine which one reigns supreme for your next Android masterpiece.

### The OG on the Block: MVC (Model-View-Controller)

MVC, the granddaddy of them all, is a well-established pattern that separates your app into three distinct layers:

* **Model:** The heart of your app, it encapsulates the data and business logic.
* **View:** The visual representation of the data, responsible for UI elements and user interaction.
* **Controller:** The glue that binds them, handling user interactions, updating the Model, and notifying the View of changes.

### MVC's Strengths

* Simplicity: Easy to grasp for beginners due to its clear separation of concerns.
* Widely Adopted: Abundant resources and learning materials available.
* Testable Model: The Model can be unit tested in isolation.

### MVC's Weaknesses

* Tight Coupling: View and Controller are tightly linked, making UI changes impact the Controller and vice versa. This can become a maintenance nightmare in complex apps.
* Fat Controller: The Controller can become overloaded with UI logic, reducing its testability and manageability.
* Limited UI Logic Testability: Testing UI logic within the Controller can be challenging.


### The Charmer: MVP (Model-View-Presenter)

MVP introduces a new layer, the Presenter, to address the shortcomings of MVC:

* **Model:** Same as MVC, holds the data and business logic.
* **View:** Responsible for UI and user interactions, but doesn't contain any logic (think of it as a passive component).
* **Presenter:** The mediator, handling user interactions, updating the Model, and notifying the View of changes. It decouples the View and Controller, improving maintainability.

### MVP's Allure

* Improved Separation: Clearer separation of concerns between UI, data, and presentation logic.
* Testable UI Logic: The Presenter can be easily unit tested in isolation.
* Flexible View Implementation: The View can be easily replaced without affecting the Presenter or Model.

### But Don't Be Blinded by the Charm

* Increased Complexity: Introducing the Presenter adds another layer, with a potentially steeper learning curve.
* Boilerplate Code: Setting up Presenters and their interactions can involve some repetitive code.


### The New Sheriff in Town: MVVM (Model-View-ViewModel)

MVVM takes separation to the next level, introducing a ViewModel to manage UI data and logic:

* **Model:** Responsible for data sources. It collaborates with ViewModel for data access (get/save).
* **View:** Responsible for UI display and user interactions, but doesn't contain any logic or data binding.
* **ViewModel:** Acts as the single source of truth for the View, handling data preparation, presentation logic, and notifying the View of changes. It leverages data binding frameworks for seamless UI updates.

### MVVM's Merits

* Clean Separation: Strongest separation between UI, data, and presentation logic, leading to excellent maintainability and testability.
* Bidirectional Data Binding: Frameworks like Data Binding Library simplify data flow between View and ViewModel.
* Testable UI Logic: The ViewModel can be easily unit tested.

### Is MVVM Always the Right Choice?

* Steeper Learning Curve: Understanding data binding and interactions between View, ViewModel, and Model can be challenging for beginners.
* Potential Over-engineering: MVVM might be overkill for very simple apps.


### Choosing Your Architectural Champion

The ideal architecture pattern depends on your project's complexity and team's experience:

* Simple Apps: MVC can be a good starting point due to its simplicity.
* Medium-Sized Apps: MVP offers a good balance between maintainability and complexity.
* Complex Apps: MVVM provides the cleanest separation and best testability.

Remember, these are just guidelines. Consider your specific project needs and team expertise when making your decision. No matter which pattern you choose, a well-structured architecture will keep your Android app healthy and scalable for the future.

0 comments on commit 4387431

Please sign in to comment.