Cum Să Implementezi MVC Pattern — Model, View, Controller
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
- Model care cunoaște View-ul (notificări directe în loc de evenimente)
- Controller gras (fat controller) cu prea multă logică de business
- View cu logică de business (SQL, validări complexe)
- MVC implementat fără separare reală — doar foldere separate, dar cod amestecat
- Ignorarea altor pattern-uri ajutătoare (Repository, Service Layer)
Întrebări Frecvente
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