Suggest an editImprove this articleRefine the answer for “What are the common mistakes when implementing MVC?”. Your changes go to moderation before they’re published.Approval requiredContentWhat you’re changing🇺🇸EN🇺🇦UAPreviewTitle (EN)Short answer (EN)When implementing **MVC (Model-View-Controller)**, mistakes are often made that break the very idea of separation of concerns. As a result, the code becomes tangled, poorly testable, and loses the architecture's advantages. **Key point:** the most common mistakes in MVC are mixing roles and violating the direction of dependencies; correct MVC is a clean chain where the Model stores, the Controller manages, and the View shows.Shown above the full answer for quick recall.Answer (EN)ImageWhen implementing **MVC (Model-View-Controller)**, mistakes are often made that break the very idea of separation of concerns. As a result, the code becomes tangled, poorly testable, and loses the architecture's advantages. Here are the common problems. --- ### 1. **Mixing logic between layers** The most common mistake is when layers start "reaching into" each other's responsibilities. - Business logic gets added to the **View** (`if user.balance > 1000: show_discount()`), - SQL queries get written in the **Controller**, - Interface-output code appears in the **Model**. *Problem:* the separation-of-concerns principle is broken, and testing becomes impossible. **How to do it right:** Model - only data and business rules, Controller - flow control, View - pure display. --- ### 2. **A "fat controller"** When most of the logic piles up in the controller, it starts deciding everything: validation, database work, and data formatting. *Problem:* the controller grows, becomes unreadable, and depends on every layer. **How to do it right:** move the core business logic into the Model or separate services; the controller should only be a connecting link. --- ### 3. **A "fat model" (a God Object)** The opposite extreme: all the logic in a single model that "knows everything" and does everything, from calculations to sending emails. *Problem:* the model loses focus, becomes overloaded, dependent, and fragile. **How to do it right:** split models by meaning, and move business operations into separate services or use-case classes. --- ### 4. **Lack of dependency inversion** Layers directly create instances of each other: ```python controller = Controller() controller.model = Model() ``` *Problem:* modularity is broken, and it becomes impossible to replace an implementation or test a layer in isolation. **How to do it right:** use **Dependency Injection (DI)**: pass dependencies through a constructor or a container. --- ### 5. **Overloading the View with formatting logic** Instead of simply displaying data, the view starts calculating, filtering, and processing it. *Problem:* any format change breaks the visualization. **How to do it right:** prepare the data for display in advance, in the model or the controller. --- ### 6. **Violating the direction of dependencies** The View reaches the Model directly, bypassing the Controller, or one Controller calls another Controller. *Problem:* data flows become unpredictable. **How to do it right:** the interaction must be strictly linear: `View ← Controller → Model`. --- ### 7. **No events or notifications** The model changes data, but the View does not find out. *Problem:* the interface does not update when the data changes. **How to do it right:** use the **Observer** pattern or **data binding** so the View reacts to Model changes. --- **Summary:** > The most common mistakes in MVC are mixing roles and violating the direction of dependencies. > > Correct MVC is a clean chain: > **the Model stores**, **the Controller manages**, **the View shows**. > > Everything else is a deviation that makes the architecture fragile and unmanageable.For the reviewerNote to the moderator (optional)Visible only to the moderator. Helps review go faster.