{
  "id": 7599411,
  "title": "MVC, MVP, MVVM, MVVM-C, VIPER: one pattern wearing five outfits",
  "url": "https://urgent.news/2026/09/15/mvc-mvp-mvvm-mvvm-c-viper-one-pattern-wearing-five-outfits",
  "topic": "tech",
  "section": "Tech",
  "published": "2026-09-15T17:47:49.000Z",
  "source": {
    "name": "Dev.to",
    "slug": "dev-to",
    "url": "https://dev.to/lovestaco/mvc-mvp-mvvm-mvvm-c-viper-one-pattern-wearing-five-outfits-3b73"
  },
  "original_language": "en",
  "account": "Maneshwar, a developer working on LiveReview, a code review tool for critical systems, noticed that developers often debate the best architectural pattern for mobile apps. Some argue for MVC, others suggest MVVM, and some even propose VIPER. After exploring these options, Maneshwar realized that all five patterns are essentially the same, just dressed in different styles.\n\nAt their core, MVC, MVP, MVVM, MVVM-C, and VIPER all focus on three key components: the View, which is the user interface and renders pixels and captures user input; the Model, which holds the business logic and data; and a translator between the View and Model. This translator can take various forms, such as a Controller, Presenter, or View-Model, depending on the specific pattern being used.\n\nMVC, one of the oldest patterns, separates the data and UI in a desktop app. The View communicates with the Model through a central Controller, which handles all the coordination. While this approach works for small apps, it can become unwieldy as the app grows.\n\nMVP addresses the bloated-controller problem by separating UI logic into a dedicated Presenter. The View remains simple and focused on rendering, while the Presenter handles all interactions with the Model. This makes MVP easier to test, as the Presenter can be unit tested without a full UI.\n\nMVVM takes this a step further by using two-way data binding between the View and a View-Model. The View simply binds to the View-Model's properties, and any changes to the Model are automatically reflected in the UI. This reduces boilerplate code, but can make debugging more challenging due to the complex chain of notifications.\n\nMVVM-C, an extension of MVVM, introduces a Coordinator to manage navigation between screens. This helps keep the View-Model focused on its original purpose of data binding and business logic, while navigation responsibilities are handled separately.\n\nFinally, VIPER takes the \"one job, one file\" philosophy to its extreme. Each component (View, Interactor, Presenter, Entity, and Router) has its own dedicated file, promoting separation of concerns. While this approach leads to a clean codebase, it can also result in more files and larger projects.\n\nUltimately, Maneshwar discovered that despite their differences in terminology and structure, these architectural patterns all boil down to the same fundamental principles. By understanding the core components of View, Model, and the translation layer, developers can choose the pattern that best fits their app's needs, rather than getting caught up in the debate over which specific pattern is \"best.\"",
  "summary": "Hello, I'm Maneshwar, and I'm building LiveReview — a blast-radius aware AI code review built for your business-critical systems. Star us to help devs discover the project, give it a try, and share your feedback to help improve the product. Every mobile team eventually has the same argument. Someone says the ViewController is 3,000 lines long and needs to be broken up. Someone else says \"just use…",
  "key_points": [],
  "editors_take": null,
  "illustration": null,
  "coverage": {
    "outlets": 1,
    "also_reported_by": []
  },
  "ai_generated": true,
  "disclaimer": "Summaries, key points and the editor’s take are written by software from other outlets’ reporting and may contain errors — always check the linked original."
}