معماری MVC و MVT و API در جنگو | بررسی ساختار

8 شهريور ۱۴۰۲

معماری MVC و MVT و API در جنگو | بررسی ساختار

فقط لازم است تعیین کنید چه داده هایی را از جنگو انتظار دارید و ادامه مراحل را به خودش بسپارید! تابحال به این فکر کرده اید که جنگو از چه معماری پشتیبانی می کند؟ جنگو می تواند داده ها را از پایگاه داده بازیابی کند. سپس به کمک الگو معماری MVT و MVC داده ها را پردازش می کند و در نهایت بدون نوشتن کد SQL، داده ها را به یک URL نگاشت خواهد کرد.

 

جنگو چیست؟

جنگو یک فریمورک وب منبع باز و سطح بالا است که به زبان برنامه نویسی پایتون نوشته شده و امکان توسعه سریع و ایمن را فراهم می کند. فلسفه جنگو حول اصل "تکرار نکنید" (DRY) می چرخد، که به معنای کاهش تکرار و ارتقای قابلیت استفاده مجدد کد است.


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


ساختار جنگو

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

 

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

الگوی معماری MVT در جنگو، از سه مولفه مدل (Model)، نما (View) و قالب (Template) شکل گرفته است. الگوی MVT با وجود دشواری بیشتری که در یادگیری و نحوه استفاده در طراحی جنگو دارد، در مقایسه با الگوی MVC از کاربرد بیشتری برخوردار است. زیرا جنگو بطور پیش فرض به عنوان یک کنترل کننده عمل می کند و قادر است با واکشی داده، درخواستی را از برنامه دریافت کند و پاسخی را به آن بازگرداند. به بیانی ساده تر، جنگو مسئولیت هایی که بخش کنترل کننده الگوی MVC انجام می دهد را می تواند با منطق خودش انجام دهد. بنابراین، معماری MVT کارایی بیشتری نسبت به MVC دارد. 

به طور کلی عملکرد معماری MVT در جنگو به این گونه است که در هنگام جستجوی عبارتی در صفحات وب توسط کاربر، یک درخواست URL به جنگو ارسال می شود و سپس جنگو منبع آن را بازیابی می کند. اگر URL به یک "نما" مرتبط باشد، جنگو آن "نما" را فرا می خواند. سپس "نما" و "مدل" با یکدیگر در تعامل قرار می گیرند تا داده ی مناسب از پایگاه داده بازیابی شود. در نهایت این داده ها به وسیله "الگو" به کاربر ارسال می شوند. اما الگوی معماری MVC در جنگو چگونه عمل می کند؟

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

الگو MVC تشکیل شده از سه مولفه مدل (Model)، نما (View) و کنترل کننده (Controller) است که در توسعه برنامه های کاربردی بزرگتر عملکرد بهتری دارد. همچنین MVC می تواند پیچیدگی های طراحی وب یا اپلیکیشن را با حفظ ساختار کد کاهش دهد تا در صورت نیاز، اصلاح آن ساده تر شود. همچنین این الگو می تواند ویژگی های ASP.NET را با جنگو ترکیب کند.


بیشتر بخوانید: آموزش asp net mvc


هنگامی که یک کاربر در موتورهای جستجو به دنبال چیزی می گردد، یک درخواست HTTP به نما می رسد. نما اطلاعات مورد نیاز را از کاربر دریافت می کند، سپس داده های مدل را ارائه می دهد. لازم به ذکر است که تمامی این مراحل توسط کنترل کننده هدایت می شود. اما این مولفه ها دقیقا چه هستند و کاربردشان چیست؟

 

  1. مدل (Model)

مدل مولفه ای است که بر مبنای منطق تجاری، ساختار داده را در جنگو تعریف می کند. همچنین وظیفه نگهداری، به روز رسانی و ذخیره داده ها در وب یا اپلیکیشن را نیز بر عهده دارد. و به عنوان واسطه بین وب و پایگاه داده هم عمل می کند. اما مدل، نحوه ارائه داده به کاربر را نمی داند. 

همانطور که می دانید، عملکرد مدل در هر دو الگوی MVC و MVT مشابه است.

 

  1. نما (View)

نما یک تابع کنترل کننده است که درخواست های HTTP را با واکشی داده ها از مدل پردازش می کند، تا روی سرور دیده شود و به URL ارسال کند. به بیانی ساده تر، نما درخواستی را از وب دریافت می کند و پاسخی را بر مبنای منطق رابط کاربری خود به وب باز می گرداند. پاسخ در نماهای جنگو می تواند هر چیزی باشد که یک مرورگر وب می تواند نشان دهد، مانند خطای 404.

نما در MVC و MVT تا حدی متفاوت عمل می کند. به این صورت که در معماری MVC، نما لایه ای است که اطلاعاتی را از کاربر دریافت می کند و سپس تصمیم می گیرد که کدام داده از میان داده هایی که مدل جمع آوری کرده است را به کاربر ارسال کند.

اما در معماری MVT برای نما تعریف شده است که کدام داده را به کاربر نشان دهد. ولی اینکه داده ها چگونه نمایش داده شوند تعریف نشده است. در عوض چگونگی ارائه داده ها به الگو واگذار شده است.

 

  1. کنترل کننده (Controller)

هنگامی که درخواستی به نما می رسد، روند پردازش آن درخواست توسط کنترل کننده کنترل می شود. کنترل کننده میان دو مولفه مدل و نما، هماهنگی و تعامل ایجاد می کند.  وظیفه مولفه کنترل کننده، مدیریت و انتخاب نما بر اساس تعاملی است که با کاربر دارد. به این صورت که داده ها را از رشته کوئری به مدل منتقل می کند، تا مدل داده ها را در پایگاه داده ذخیره کند و سپس نما آن ها را نمایش دهد. حال هرگاه داده ها تغییر کنند، کنترل کننده باید نما را به روز کند. در واقع کنترل کننده، نمای مناسب را با توجه به درخواستی که کاربر دارد ایجاد می کند.

 

  1. الگو (Template)

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

الگو به طور مشابه وظیفه نما در معماری MVC را دارد به این صورت که نحوه ارائه داده ها را تعریف می کند. هنگامی که کاربر از یک برنامه تحت وب استفاده می کند، قالب یا همان الگو، تمام فایل های HTML و CSS را مدیریت می کند و محتوا را نشان خواهد داد.

 

مقایسه معماری های MVC و MVT

همانطور که متوجه شده اید، دو الگو معماری MVC وMVT در دو مولفه کنترل کننده و قالب متفاوت هستند. بنابراین عملکرد و کاربرد متفاوتی با یکدیگر دارند. مقایسه دو الگو MVT و MVC بطور کلی در جدول زیر آورده شده است:

 

 

 

MVC

MVT

دو مولفه مدل و نما توسط کنترل کننده کنترل می شوند

همه اجزا با یکدیگر ارتباط برقرار می کنند

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

نیازی به کدنویسی مجدد ندارد

در توسعه پروژه های کوچک مناسب نیست

توسعه پروژه ها را در مقیاس بزرگ و کوچک را ساده می کند

نحوه ارائه داده توسط "نما" انجام می شود

نحوه ارائه داده توسط "الگو" انجام می شود

الگوی URL را مدیریت نمی کند

الگوی URL را مدیریت می کند

 

 

 

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

بجز معماری های MVC و MVT، یک معماری دیگر با نام API هم برای جنگو وجود دارد. API یا Application Programming Interface رابطی است که به دو برنامه اجازه می دهد با هم تعامل داشته باشند، حتی بدون اینکه بدانند چگونه! API سبب می شود توسعه دهندگان به جای نوشتن کد جدید یا استفاده از زبان دیگر، از API استفاده کنند. API ها که نحوه ارتباط برنامه ها با یکدیگر را تعیین می کنند، به وسیله فریمورک های گوناگونی ساخته می شوند. اگر می خواهید در رابطه با API ها بیشتر بدانید، می توانید به مقاله ویژگی ها و کاربرد API نگاهی بیاندازید. در ادامه لیستی از برترین فریمورک های پایتون که در REST API کاربرد دارند را بررسی خواهیم کرد:

 

Django Rest Framework

فریمورک Django Rest، یک ابزار قدرتمند برای ساخت API با جنگو است که به طور هدفمند توسعه را سریع تر می کند. Django REST انعطاف پذیری بیشتری نسبت به دیگر فریمورک ها نشان می دهد. به این صورت که ساختار خودکار ندارد و اجازه می دهد توسعه دهنده عملکرد را تعریف کند.

 

FAST API

FAST API نیز یکی دیگر از سریع ترین فریمورک های پایتون برای توسعه API است که سرعت توسعه را 3 تا 4 برابر افزایش می دهد و باگ ها را در حدود 40 درصد می تواند کاهش دهد. به طور کلی اکثر API ها کند هستند، در ذخیره سازی درخواست ها محدودیت دارند و گاهی ممکن است نیاز شود کدنویسی آن از ابتدا انجام شود. بنابراین استفاده از FAST API یک انتخاب ایده آل است. این فریمورک در مقایسه با جنگو کارایی بالاتری دارد. FAST API انعطاف پذیر و ساده تر است و همچنین یادگیری آن نسبت به رقبا، ساده تر می باشد.

 

Flask RESTful 

Flask یک فریمورک محبوب با استفاده آسان می باشد. افزونه آن به نام Flask RESTful می تواند ساخت REST API را برای توسعه دهندگان تا حد زیادی ساده و همچنین سریع کند. با این وجود، Flask RESTful نه تنها از لحاظ امنیت آسیب پذیر است، بلکه عملکرد محدودی نیز دارد. بنابراین، مدیریت آن در پروژه های بزرگ دشوار می شود. 

 

Pyramid

Pyramid یکی از فریمورک های قدرتمند پایتون است که برای ساخت API های پیچیده و ایمن و همچنین پروژه های بزرگ طراحی شده است. یکی از مزیت های کلیدی Pyramid این است که توسعه دهندگان بر اساس نیاز و ترجیحات خود پیش می روند و آزادی در انتخاب الگوهای معماری MVP/MVT/MVC دارند. Pyramid یک ایراد بزرگ دارد و آن این است که در مقایسه با فریمورک های محبوبی مانند Flask و Django از جامعه کوچکی برخوردار است به این معنا که برخورداری از پشتیبانی، یافتن منابع و داکیومنت در آن دشوار می شود.

 

Falcon

Falcon فریمورکی سریع، کارآمد با جامعه کوچک می باشد، که به طور خاص برای ساخت API طراحی شده است. زیرا پشتیبانی داخلی خوبی دارد و می تواند چندین درخواست را به طور همزمان مدیریت کند. اما در پروژه های پیچیده که به عملکرد ایده آل نیاز دارند مناسب نیست.

 

Bottle

Bottle یکی دیگر از فریمورک های پایتون با کارکرد آسان است که به عنوان یک ویژگی منحصر به فرد، از ایجاد برنامه های مستقل و کاربردی وب و اتصالات پایگاه داده به خوبی پشتیبانی می کند. Bottle سریع و کارآمد عمل می کند، بنابراین برای ساخت API با کارایی بالا مناسب است. کار کردن با Bottle برای توسعه دهندگان می تواند چالش برانگیز باشد، زیرا پلاگین های آن گسترده نیستند. از دیگر معایب این فریمورک، عملکرد محدود و برخورداری از جامعه کوچک است.

 

 Eve

فریمورک Eve برای تولید خودکار API ها از منابع داده مانند SQL طراحی شده است که استفاده از آن آسان، سریع و انعطاف پذیر باشد و آن را به یک انتخاب ایده آل تبدیل کند. Eve در احراز هویت داده ها عملکرد خوبی دارد و همچنین از فرمت های مختلف مانند JSON، XML و CSV پشتیبانی می کند. بزرگترین ایراد Eve می تواند یادگیری دشوار آن باشد.


 

کلام آخر

در این مقاله اجزای معماری MVT و MVC و چگونگی عملکرد آن ها در پروژه های جنگو را بررسی کردیم. همچنین با چگونگی افزایش سرعت توسعه API توسط فریمورک های پایتون آشنا شدیم. اگر هنوز کار با فریمورک جنگو را بلد نیستید و یا به خوبی آن را فرا نگرفته اید، می توانید دوره آموزش جنگو آکادمی کدیاد را تماشا کنید که به زبان ساده از صفر تا صد این فریمورک را آموزش داده است. البته همانطور که می دانید، برای یادگیری Django باید زبان برنامه نویسی پایتون را آموزش دیده باشید. بنابراین، اگر در کدنویسی پایتون اشکالاتی دارید یا می خواهید از صفر تا مباحث پیشرفته آن را یاد بگیرید، آکادمی کدیاد دوره آموزش جامع پایتون را بصورت کاملا رایگان در اختیار شما قرار داده است.

 


پرسش و پاسخ

 

آیا معماری MVT از معماری MVC کاربرد بیشتری دارد؟

بله، زیرا جنگو بطور پیش فرض به عنوان یک کنترل کننده عمل می کند و قادر است با واکشی داده، درخواستی را از برنامه دریافت کند و پاسخی را به آن بازگرداند.

 

فریمورک REST API چیست؟

فریمورک REST API فرایند ساخت API را به کمک ابزارهای کاربردی و الگو های از پیش تعریف‌ شده، مدیریت می‌ کند. که سبب می شود توسعه دهندگان به جای پرداختن به مدیریت سطح پایین HTTP، روی تعریف منطق تجاری API های خود تمرکز کنند.

 

کدام فریمورک پایتون برای ساخت REST API مناسب تر است؟

برای انتخاب فریمورک مناسب تر باید آنها را از نظر جامعه پشتیبانی و کارایی در عملکرد بررسی کرد. Django REST و Flask RESTful قدرتمندتر عمل می کنند و از جامعه بزرگتری پشتیبانی می شوند. Falcon نیز عملکرد بسیار خوبی دارد ولی از جامعه نسبتا کوچکی پشتیبانی می شود.

 

چرا باید فریمورک Django REST را یاد بگیریم؟

اگر پایتون و جنگو را فرا گرفته اید و اکنون می خواهید یک ابزار بسیار قدرتمند برای توسعه ی سریع و آسان API را یاد بگیرید، فریمورک Django REST می تواند بهترین انتخاب باشد. اگر می خواهید Django REST را صفر تا صد و به طور اصولی یاد بگیرید، آموزش جامع Django Rest Framework کدیاد را از دست ندهید!

محبوب ترین مقالات