توی دنیای توسعه وب، همیشه صحبت از معماری ‌های مختلف هست تا کد هامون تمیز و قابل مدیریت باشن. معروف ‌ترین معماری که احتمالا اسمش رو شنیدی MVC (Model-View-Controller) هست. اما وقتی وارد دنیای جنگو (Django) میشی، یهو با یک اصطلاح جدید روبرو میشی: MVT. اینجا یک سوال مهم پیش میاد: آیا جنگو داره ساز مخالف میزنه؟ فرق این دوتا چیه و اصلا چرا باید برامون مهم باشه؟

تصور کن وارد یک رستوران شیک شدی. تو (کاربر) سفارش غذا میدی، گارسون سفارش رو به آشپزخونه میبره، آشپز مواد اولیه رو آماده میکنه، غذا رو میپزه و نهایتاً توی یک بشقاب زیبا جلوی تو میذاره. معماری جنگو دقیقاً همین فرآیند رستوران رو شبیه‌ سازی میکنه.

معماری MVT چیست؟ (Model - View - Template)

معماری MVT چیست؟ (Model - View - Template)

MVT الگوی طراحی مخصوص جنگو برای مدیریت درخواست ‌های وب است. این معماری وظایف رو به سه بخش اصلی تقسیم میکنه تا هر بخش فقط مسئول کار خودش باشه. به زبان ساده هدف MVT اینه که: "کی اطلاعات رو بیاره؟ کی پردازش کنه؟ و کی نشون بده؟"

تفاوت : MVT در برابر MVC

خیلی‌ها اول کار گیج میشن چون کلمات شباهت دارن اما نقششون کمی متفاوته. بیایید این گره رو باز کنیم:

در معماری کلاسیک MVC:

Model: داده‌ها (Data)

View: چیزی که کاربر می‌بیند (UI)

Controller: مغز متفکر که تصمیم میگیرد چه چیزی نمایش داده شود.

اما در معماری MVT جنگو:

Model: داده‌ها (مثل MVC)

View: اینجا مغز متفکر است! (شبیه Controller در MVC)

Template: چیزی که کاربر میبیند (شبیه View در MVC)

نکته کلیدی: در جنگو، خود فریمورک نقش Controller رو بازی میکنه (یعنی مسیریابی URLها)، پس برنامه‌ نویس فقط باید روی View (منطق) و Template (ظاهر) تمرکز کنه.

اجزای اصلی معماری MVT چطور کار می‌کنند؟

بیایید با همون مثال رستوران پیش بریم تا وظیفه هر بخش کاملا جا بیفته:

۱. Model (مواد اولیه و انبار)

مدل (Model) نماینده دیتابیس شماست. مسئولیت ساختار داده‌ ها و ارتباط با پایگاه داده رو بر عهده داره.

وظیفه: تعریف میکنه چه داده‌ هایی داریم (مثلا جدول کاربران، محصولات، نظرات).

در مثال رستوران: مدل مثل "انبار مواد غذایی" و "لیست موجودی" هست. آشپز (View) برای پختن غذا باید بره سراغ انبار (Model) و مواد لازم رو برداره.

۲. View (آشپز)

ویو (View) قلب تپنده و مغز متفکر اپلیکیشن شماست. جایی که منطق برنامه (Business Logic) نوشته میشه.

وظیفه: درخواست کاربر رو میگیره، با مدل صحبت میکنه تا داده‌ های لازم رو بگیره، پردازش‌ های لازم رو انجام میده و تصمیم میگیره کدوم قالب (Template) رو به کاربر نشون بده.

در مثال رستوران: ویو همان "سرآشپز" است. سفارش رو از گارسون (URL Dispatcher) میگیره، مواد رو از انبار (Model) میاره، غذا رو میپزه و میریزه توی بشقاب (Template).

۳. Template (بشقاب و تزیین غذا)

تمپلیت (Template) همون فایل ‌های HTML هستند که ظاهر سایت رو میسازن.

وظیفه: نمایش داده ‌هایی که View براش فرستاده به شکلی که برای کاربر قابل فهم و زیبا باشه.

در مثال رستوران: تمپلیت همان "بشقاب و دیزاین غذا" است. مشتری مواد اولیه خام رو نمیخواد، مشتری غذای آماده شده در یک ظرف زیبا رو می‌بینه.

چرخه حیات یک درخواست در Django Rest Framework

چرخه حیات یک درخواست (از کلیک تا نمایش)

بیایید یکبار مسیر کامل رو مرور کنیم تا ببینیم پشت پرده دقیقاً چه اتفاقی می افته:

  1. درخواست (Request): کاربر در مرورگر آدرس mysite.com/pizza را تایپ میکند.

  2. مسیریابی (URL Dispatcher): جنگو در فایل urls.py نگاه میکند و میبیند که آدرس /pizza باید به ویوی show_pizza وصل شود.

  3. منطق (View): ویوی show_pizza اجرا می‌شود. این ویو متوجه میشود که نیاز به لیست پیتزاها دارد، پس به Model دستور می‌دهد.

  4. داده (Model): مدل به دیتابیس وصل می‌شود، لیست پیتزاها و قیمت‌ شان را میگیرد و به View برمیگرداند.

  5. ترکیب (Template): ویو، لیست پیتزاها را برمیدارد و آن را با فایل HTML (تمپلیت) ترکیب میکند.

  6. پاسخ (Response): صفحه نهایی HTML آماده شده و به مرورگر کاربر ارسال میشود تا او منوی خوشمزه را ببیند.

جمع بندی

معماری MVT در جنگو طراحی شده تا کار توسعه دهنده  رو راحت و سریع کنه.

اگر میخوای ساختار داده رو تغییر بدی : برو سراغ Model.

اگر میخوای منطق کار یا محاسبات رو عوض کنی: View

اگر میخوای ظاهر سایت و HTML رو تغییر بدی: Template

این تفکیک وظایف باعث میشه که شما به جای درگیر شدن با تفاوت‌ های تئوری (مثل فرقش با MVC)، روی ساختن محصول تمرکز کنید. با MVT، کد های شما تمیز می مانند، دیباگ کردن (عیب ‌یابی) آسان ‌تر می‌شود و اگر روزی پروژه بزرگ شد، مدیریت آن از کنترل خارج نمیشود