DEV Community

Haris Madhavan
Haris Madhavan

Posted on

MVC vs MVVM: A Real-Life iOS Interview Insight

Image description
In a recent interview for an iOS Developer position, I encountered an interesting question that tested my knowledge of design patterns and my understanding of how they evolve. The discussion revolved around MVC and MVVM, two fundamental design patterns in iOS development. While I was prepared to explain their basics, the interviewer’s follow-up question surprised me.

In this article, I’ll share the question, my initial response, and what I learned from the experience. If you’re preparing for iOS interviews, this might help you navigate similar situations!

The Question: “How Does the Controller Fit into MVVM?”

The interview started with a familiar question:
“Can you explain the difference between MVC and MVVM?”

I confidently answered:

  • MVC stands for Model-View-Controller, where the Controller handles user input and updates the View and Model accordingly.
  • MVVM stands for Model-View-ViewModel, where business logic is separated from the View and placed in the ViewModel.

Feeling good about my response, I didn’t expect the next question:
“In MVVM, there’s no ‘Controller.’ So, where does the Controller’s role go?”

I was stumped. I hadn’t thought about this distinction in depth before. After the interview, I took some time to reflect and understand the concept better.

Understanding MVC and MVVM:

MVC (Model-View-Controller):

  • The Model represents the data and business logic.
  • The View displays the data to the user.
  • The Controller acts as a bridge between the Model and View, handling user inputs and updating the data.

In this pattern, the Controller often takes on a lot of responsibility, making it prone to becoming “massive” (the infamous Massive View Controller problem).

MVVM (Model-View-ViewModel):

  • The Model remains the same.
  • The View still handles the UI.
  • The ViewModel introduces a layer that manages the business logic and data-binding to the View.

In MVVM, there’s no explicit Controller. Instead, its responsibilities are split between the View(handling user inputs) and the ViewModel (handling logic and data).

Where the Controller’s Role Goes in MVVM:

In UIKit-based MVVM apps, the ViewController still exists but acts purely as part of the View. It:

  • Handles UI setup and user input.
  • Binds the UI to the ViewModel.
  • Forwards actions to the ViewModel.

In SwiftUI, the View directly binds to the ViewModel, eliminating the need for a separate ViewController altogether.

My Takeaways:

  1. Design Patterns Evolve:
    It’s important to understand not just the structure but also the responsibilities of each component.

  2. Be Prepared for Deeper Questions:
    Interviewers often go beyond surface-level questions to test your understanding of concepts.

  3. Reflection is Key:
    While I didn’t have a perfect answer in the moment, reflecting on the question helped me solidify my understanding for the future.

If you’re preparing for iOS interviews, take some time to deeply understand how design patterns distribute responsibilities. MVC and MVVM are more than just acronyms — they represent different philosophies in organizing code.

I hope this insight helps you in your interview journey. Have you faced similar questions? I’d love to hear about your experiences!

Top comments (0)