PYTHON · 디자인패턴
MVC/MTV 패턴
Model-View-Controller(MVC)와 Django의 Model-Template-View(MTV) 패턴을 Python으로 구현합니다.
디자인패턴고급MVCMTV디자인패턴architecture
핵심 설명
Model-View-Controller(MVC)와 Django의 Model-Template-View(MTV) 패턴을 Python으로 구현합니다.
Python code
from dataclasses import dataclass, field
# Model: 데이터와 비즈니스 로직
@dataclass
class UserModel:
users: list[dict] = field(default_factory=list)
def add(self, name: str, email: str):
user = {"id": len(self.users) + 1, "name": name, "email": email}
self.users.append(user)
return user
def get_all(self) -> list[dict]:
return self.users.copy()
def find(self, user_id: int) -> dict | None:
return next((u for u in self.users if u["id"] == user_id), None)
# View: 표시 로직
class UserView:
@staticmethod
def display_users(users: list[dict]):
print("=== 사용자 목록 ===")
for u in users:
print(f" [{u['id']}] {u['name']} ({u['email']})")
@staticmethod
def display_message(msg: str):
print(f">> {msg}")
# Controller: Model과 View 연결
class UserController:
def __init__(self):
self.model = UserModel()
self.view = UserView()
def create_user(self, name: str, email: str):
user = self.model.add(name, email)
self.view.display_message(f"{user['name']} 생성됨")
def list_users(self):
self.view.display_users(self.model.get_all())
# 사용
ctrl = UserController()
ctrl.create_user("Alice", "alice@test.com")
ctrl.create_user("Bob", "bob@test.com")
ctrl.list_users()학습 팁
Django의 MTV에서 View는 MVC의 Controller 역할, Template이 MVC의 View 역할입니다.
주의할 점
Model에 표시 로직을, View에 비즈니스 로직을 넣으면 관심사 분리가 무너집니다.
자주 묻는 질문
MVC/MTV 패턴란 무엇인가요?
Model-View-Controller(MVC)와 Django의 Model-Template-View(MTV) 패턴을 Python으로 구현합니다.
MVC/MTV 패턴 학습 시 주의할 점은 무엇인가요?
Model에 표시 로직을, View에 비즈니스 로직을 넣으면 관심사 분리가 무너집니다.