فصل ۳: آشنایی با معماری MVC/MVT در جنگو

""

مقدمه

قبل از ورود به مباحث عملی‌تر، خیلی مهم است که بدانی جنگو بر چه معماری‌ای ساخته شده و این معماری چه کمکی بهت می‌کند. اکثر فریم‌ورک‌های معروف وب از یک الگوی معماری استفاده می‌کنند تا کدها تمیز، قابل نگهداری و توسعه‌پذیر باشند. جنگو از معماری MVT استفاده می‌کند که شباهت زیادی به MVC دارد.


مفهوم MVC و MVT چیست؟

معماری MVC

MVC مخفف Model – View – Controller است و یکی از محبوب‌ترین معماری‌ها در دنیای وب و نرم‌افزار است.

  • Model (مدل): منطق داده و ساختار دیتابیس؛ یعنی موجودیت‌ها و ارتباطات اطلاعاتی.
  • View (نما): نمایش داده‌ها به کاربر (مثلاً همان HTMLها).
  • Controller (کنترلر): دریافت درخواست کاربر، پردازش منطق و انتخاب View مناسب.

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

جنگو رویکرد مخصوص خودش را به این معماری دارد و اسم اجزای آن را کمی تغییر داده:

  • Model (مدل): مثل همون MVC تعریف می‌شود، یعنی کار ذخیره و خواندن داده‌ها از دیتابیس را انجام می‌دهد.
  • View (ویو): اما تفاوت دارد: در جنگو، ویو یعنی همان تابع یا کلاسی که درخواست کاربر را گرفته، داده را پردازش می‌کند و نتیجه‌اش را به قالب (Template) می‌دهد.
  • Template (قالب): صفحات HTML و ساختار نمایشی که داده‌ها را به کاربر نشان می‌دهد.

پس به زبان ساده:

  • Model: کار با دیتابیس
  • View: منطق پردازش داده و انتخاب خروجی
  • Template: نمایش داده به کاربر

تفاوت MVC و MVT با مثال

تصور کن کاربر دکمه “نمایش لیست کاربران” را کلیک می‌کند:

  • در MVC: درخواست به Controller می‌رود، controller داده را از Model میگیرد و به View می‌دهد.
  • در MVT جنگو: درخواست به View می‌رود (ویوی جنگو = کنترلر در MVC)، داده را از Model می‌گیرد و به Template ارسال می‌کند تا نمایش داده شود.

در واقع View در جنگو تقریباً همان Controller در MVC است، و Template همان View در MVC است. شاید کمی گیج‌کننده باشد ولی با کار عملی کاملاً جا می‌افتد!

معماریمدل (Model)کنترلر (Controller)نما (View)
MVCModelControllerView (HTML)
MVTModelView (تابع/کلاس جنگو)Template (قالب)

مزایای استفاده از این معماری

  • تفکیک وظایف: هر بخش فقط یک کار را انجام می‌دهد
  • نگهداری و تغییر پروژه راحت‌تر می‌شود
  • گسترش کدها و تیمی کار کردن ساده‌تر است

نمونه کد ساده برای درک بیشتر

فرض کنیم می‌خواهی لیست کتاب‌ها را نمایش بدهی:

  1. مدل (Model):
   # models.py
   class Book(models.Model):
       title = models.CharField(max_length=100)
       author = models.CharField(max_length=100)
  1. ویو (View):
   # views.py
   from .models import Book
   from django.shortcuts import render

   def book_list(request):
       books = Book.objects.all()    # داده‌ها را می‌گیرد
       return render(request, 'books.html', {'books': books})
  1. قالب (Template):
   <!-- books.html -->
   <ul>
     {% for book in books %}
       <li>{{ book.title }} - {{ book.author }}</li>
     {% endfor %}
   </ul>

جمع‌بندی سریع و نکته سئو

  • معماری MVT باعث نظم و توسعه‌پذیری پروژه‌ها می‌شود.
  • نقش بخش‌های مختلف را یاد بگیر تا هنگام توسعه جنگو سردرگم نشوی.
  • اگر در عبارت‌های جستجوی گوگل مثل “معماری MVT جنگو چیست” و “تفاوت MVT و MVC” جستجو کنی، کلی منابع بیشتر پیدا می‌کنی.
محمد وب‌سایت

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *