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.