Skip to content

Cum Să Implementezi MVC Pattern — Model, View, Controller

DodaTech Updated 2025-01-15 3 min read

In this tutorial, you'll learn about Cum Să Implementezi MVC Pattern. We cover key concepts, practical examples, and best practices.

Vei învăța cum să implementezi MVC (Model-View-Controller) pattern pentru a separa responsabilitățile într-o aplicație și a crea cod organizat și ușor de întreținut.

Problema

În aplicațiile software, amestecarea logicii de business, a interfeței cu utilizatorul și a gestionării datelor duce la cod greu de întreținut, de testat și de extins.

Abordarea Greșită

Toată logica într-un singur fișier sau clasă.

# Greșit: totul într-un singur loc
class UserApp:
    def handle_request(self, user_id):
        # Logică business
        user = {"id": user_id, "nume": "Ion", "email": "ion@example.com"}

        # HTML direct în cod
        html = f"""
        <html><body>
        <h1>{user['nume']}</h1>
        <p>Email: {user['email']}</p>
        </body></html>
        """

        # Salvare directă
        with open("users.txt", "a") as f:
            f.write(str(user))

        return html

Abordarea Corectă

Separă responsabilitățile în Model, View și Controller.

# Model: datele și logica de business
class UserModel:
    def __init__(self):
        self._users = {}

    def get_user(self, user_id: int) -> dict:
        return self._users.get(user_id)

    def create_user(self, user_id: int, nume: str, email: str):
        self._users[user_id] = {"id": user_id, "nume": nume, "email": email}

# View: prezentarea datelor
class UserView:
    def render_user(self, user: dict) -> str:
        if not user:
            return "<h1>Utilizator negăsit</h1>"
        return f"""
        <h1>{user['nume']}</h1>
        <p>ID: {user['id']}</p>
        <p>Email: {user['email']}</p>
        """

# Controller: gestionează request-urile și coordonează
class UserController:
    def __init__(self, model: UserModel, view: UserView):
        self._model = model
        self._view = view

    def show_user(self, user_id: int) -> str:
        user = self._model.get_user(user_id)
        return self._view.render_user(user)

    def create_user(self, user_id: int, nume: str, email: str):
        self._model.create_user(user_id, nume, email)
        return self._view.render_user(self._model.get_user(user_id))

Rezolvare Pas cu Pas

1. Creează Model-ul

Modelul gestionează datele și logica de business.

class TaskModel:
    def __init__(self):
        self._tasks = []
        self._next_id = 1

    def add_task(self, title: str, completed: bool = False):
        task = {"id": self._next_id, "title": title, "completed": completed}
        self._tasks.append(task)
        self._next_id += 1
        return task

    def get_all(self) -> list:
        return self._tasks

2. Creează View-ul

View-ul se ocupă doar de prezentare.

class TaskView:
    def render_list(self, tasks: list) -> str:
        items = ''.join(
            f'<li>{"✓" if t["completed"] else "○"} {t["title"]}</li>'
            for t in tasks
        )
        return f"<ul>{items}</ul>"

    def render_form(self) -> str:
        return '<form method="POST"><input name="title"><button>Adaugă</button></form>'

3. Creează Controller-ul

Controller-ul primește input și coordonează Model și View.

class TaskController:
    def __init__(self, model: TaskModel, view: TaskView):
        self._model = model
        self._view = view

    def index(self) -> str:
        tasks = self._model.get_all()
        return self._view.render_form() + self._view.render_list(tasks)

    def add(self, title: str):
        self._model.add_task(title)
        return self.index()

4. Conectează totul

model = TaskModel()
view = TaskView()
controller = TaskController(model, view)

# Răspunde la request-uri
print(controller.index())
print(controller.add("Învață MVC pattern"))

Sfaturi de Prevenție

  • Păstrează Model-ul complet independent de View și Controller
  • View-ul nu trebuie să conțină logică de business
  • Controller-ul trebuie să fie subțire (thin controller) — doar coordonare

Greșeli Comune

  1. Model care cunoaște View-ul (notificări directe în loc de evenimente)
  2. Controller gras (fat controller) cu prea multă logică de business
  3. View cu logică de business (SQL, validări complexe)
  4. MVC implementat fără separare reală — doar foldere separate, dar cod amestecat
  5. Ignorarea altor pattern-uri ajutătoare (Repository, Service Layer)

Întrebări Frecvente

### Ce este MVC pattern?

MVC (Model-View-Controller) este un pattern arhitectural care separă o aplicație în trei componente: Model (date și logică), View (prezentare) și Controller (gestionare request-uri).

Care este diferența dintre MVC și MVP?

În MVP, View-ul este pasiv și Controller-ul (Presenter) îi spune ce să afișeze. În MVC, View-ul poate observa direct Model-ul.

MVC mai este relevant în 2025?

Da, MVC rămâne fundația multor framework-uri moderne: Spring MVC (Java), Django (Python), ASP.NET MVC (C#), Ruby on Rails.

Construit de dezvoltatorii Doda Browser, DodaZIP și Durga Antivirus Pro. Uneltele DodaTech sunt construite pe arhitecturi MVC și MVVM moderne.

Built by the developers of DodaTech

Doda Browser, DodaZIP & Durga Antivirus Pro