The key to getting MVC correct is understanding what models are

Confusion and Definition Drift of MVC

  • Many commenters say every explanation of MVC differs; in practice it often means “split code into three buckets” with vague roles.
  • The original Smalltalk MVC is cited as precise but very different from modern “MVC” in web frameworks and RAD tools.
  • Several people note impostor feelings or long-term confusion, especially around what a “controller” really is.

What Models Are (and Why It Matters)

  • Strong agreement that the key is a rich, domain-oriented model layer: many collaborating objects representing how users think about the problem.
  • A “pure” model makes business logic testable with stable unit tests; collapsing model/view/controller into widgets forces fragile UI tests.
  • Others emphasize that “model” is overloaded: domain model, ORM table, DTOs, view models. Context matters.

Controllers, Views, and Tight Coupling

  • In real GUIs, view and controller tend to be tightly bound by input handling; some argue that most interaction logic naturally lives in views.
  • The original paper allows views to edit models directly, with controllers as a catch‑all for extra coordination. Misreading this leads to “Massive View Controller” anti‑patterns.
  • One proposed heuristic: if controllers are one‑to‑one with views, the extra layer is mostly wasted design effort.

Data Flow, Observers, and “True MVC” Behavior

  • Original MVC: models are observable; views subscribe and pull data after “model changed” notifications; models never know views.
  • This avoids update cycles and ensures view consistency even if intermediate updates are skipped.
  • Some criticize heavy use of observers/signals for hiding control flow and making debugging difficult.

MVC on the Web and in Frameworks

  • MVC was designed for desktop GUIs, not client–server; applying it to web apps introduces mismatches (HTTP, routing, auth).
  • Web “MVC” often puts all three layers on the server; the router/controller aspect is seen as more central than the model in that context.
  • RAD tools (VB, Delphi, MFC, code‑behind) encouraged mixing UI and logic, which then got retrospectively labeled as MVC.

Patterns, Concept Capture, and Inevitable Glue

  • Broader debate: MVC, OOP, design patterns, REST, monads all suffer from “concept capture” where popular usage drifts far from original definitions.
  • Multiple people argue that some amount of ugly, non‑reusable “glue” between UI components and domain logic is unavoidable; architecture mainly controls where that ugliness lives.