جنگو (چارچوب نرم‌افزاری) کیست؟ توضیح بده.
جنگو یک چارچوب نرم‌افزاری تحت وب آزاد و متن‌باز است که به زبان پایتون نوشته شده‌است و از معماری مدل-نما-قالب پیروی می‌کند.هدف اصلی جنگو ساخت آسان سایت‌های پیچیده و وابسته به دیتابیس است و بر پایهٔ قابلیت استفادهٔ مجدد و قابل اتصال بودن اجزای مختلف، توسعهٔ سریع و اصل خودت را تکرار نکن (DRY) طراحی شده‌است. جنگو سراسر از پایتون استفاده می‌کند، حتی برای تنظیمات، فایل‌ها و مدل‌های اطلاعات.از وب‌سایت‌های مشهوری که از جنگو استفاده می‌کنند می‌توان به پی‌بی‌اس،اینستاگرام،بنیاد موزیلا،واشینگتن تایمز اشاره کرد. جنگو همچنین در ساخت شبکه اجتماعی پینترست استفاده شد اما بعداً، به فریم ورک فلسک انتقال یافت.تاریخچه.جنگو در پاییز سال ۲۰۰۳ توسط Simon Willison و Adrian Holovaty در حین ایجاد برنامه در شرکت Lawrence Journal-World متولد شد. سپس در سال ۲۰۰۵ تحت اجازه‌نامه بی‌اس‌دی منتشر شد.نام جنگو از جنگو راینهارت، نوازندهٔ گیتار جاز گرفته شده‌است.در ژوئن سال ۲۰۰۸، بنیاد نرم‌افزاری Django Software Foundation (DSF) برای توسعه و حفظ جنگو شکل گرفت.امکانات.کامپوننت‌ها (اجزاء).هسته اصلی جنگو مبتنی بر معماری MVT است که شامل Model برای ارتباط با پایگاه داده، View و Template است.همچنین در هسته فریم ورک جنگو امکانات زیر گنجانده شده:نرم‌افزارهای بسته‌بندی‌شده.در توزیع اصلی جنگو تعداد زیادی بسته‌های نرم‌افزاری وجود دارد که شامل:طبقه‌بندی وب سرور.جنگو می‌تواند به راحتی با استفاده از وب سرورهایی همچون آپاچی، انجین‌اکس با به کار بردن واسط دروازه کارساز وب(WSGI)، گونیکورن (سرور HTTP)، و یا، Cherokee اجرا شود.همچنین جنگو، به‌طور رسمی، از چهار پایگاه داده بک اند از جمله: پستگرس‌کیوال، مای‌اس‌کیوال، اس‌کیوال لایت و پایگاه داده اوراکل پشتیبانی می‌کند.برای استفاده از نواس‌کیوال در جنگو، انشعاب (توسعه نرم‌افزار) ای به نام django-nonrel به‌وجود آمده که امکان پشتیبانی از پایگاه داده‌هایی همچون مانگودی‌بی و گوگل اپ انجین را فراهم کرده‌است.جنگو می‌تواند با استفاده از جایتون بر بستر برنامه‌های سمت سرور مبتنی بر سکوی جاوا، نسخه سازمانی(Java EE) مانند WildFly یا GlassFish استفاده شود که برای اجرای آن، نیاز به نصب django-jython که اتصال به پایگاه داده را ممکن می‌کند نیاز است.تاریخچهٔ انتشار نسخه.گهگاه تیم جنگو، نسخه‌های خاصی از برنامه را با عنوان پشتیبانی بلند مدت (LTS) منتشر می‌کند. همچنین نسخهٔ LTS به‌طور معمول تا سه سال یا بیشتر، به‌روزرسانی‌های امنیتی و اصلاحات برنامه را دریافت می‌کند.پشتیبانی جنگو از ابزارهای توسعه.برای توسعه دادن پروژه جنگو خود، هیچ نیاز به ابزار خاصی ندارید و می‌توانید با استفاده از ویرایش‌گر متن‌های مرسوم کد منبع خود را توسعه دهید. با این حال ویرایش‌گر متن‌هایی به‌طور مخصوص برای برنامه‌نویسی طراحی شده‌اند که قابلیت‌هایی همچون برجسته‌سازی نحو را دارا هستند.با توجه به اینکه جنگو با استفاده از زبان پایتون نوشته می‌شود، استفاده ازویرایش‌گر متن‌هایی که از نحوه نوشتار پایتون پشتیبانی می‌کنند می‌تواند مفید باشد.با استفاده از محیط یکپارچه توسعه نرم‌افزار(IDE) می‌توانید قابلیت‌هایی مانند اشکال‌زدایی و بازسازی کد را حین توسعه برنامه خود استفاده کنید. همانند ویرایش‌گر متن ساده، محیط یکپارچه توسعه نرم‌افزار(IDE) که از پایتون پشتیبانی می‌کنند هم می‌توانند برای توسعه مفید باشند.مقاله مرجع این مطلب رو ببینید:نحوه به‌کارگیری جنگو در رعایت اصول مهندسی نرم‌افزار.چارچوب جنگو با ارائه‌ی امکانات و ابزارهای قدرتمندی، توسعه‌دهندگان را در رعایت اصول اساسی مهندسی نرم‌افزار یاری می‌رساند. به‌ویژه در زمینه‌های امنیت داده‌ها، جلوگیری از تکرار کد و تسهیل پیکربندی، جنگو با ارائه‌ی راه‌حل‌های نوآورانه، این اصول را به‌طور کارآمدی پیاده‌سازی می‌کند.امنیت داده‌ها.جنگو امنیت داده‌ها را با ارائه‌ی مکانیزم‌هایی همچون جلوگیری از حملات CSRF (Cross Site Request Forgery) و SQL Injection از طریق ORM (Object-Relational Mapping) خود به‌طور جدی تضمین می‌کند. همچنین، سیستم احراز هویت پیش‌فرض جنگو و سیاست‌های دسترسی قابل تنظیم، به مدیران سایت امکان می‌دهد تا داده‌های حساس را در برابر دسترسی‌های غیرمجاز محافظت نمایند.جلوگیری از تکرار کد.اصل DRY (Don't Repeat Yourself) یکی از اصول کلیدی در جنگو است که توسعه‌دهندگان را تشویق می‌کند تا از تکرار کد در پروژه‌های خود اجتناب کنند. جنگو با ارائه‌ی سیستم قالب‌بندی پیشرفته و امکان به‌اشتراک‌گذاری کد بین برنامه‌های مختلف، این امکان را فراهم می‌آورد که با کمترین تکرار کد، بیشترین بهره‌وری را از کدنویسی به دست آورد.تسهیل پیکربندی.جنگو با پیشنهاد رویکرد «Convention over Configuration» (ترجیح قرارداد نسبت به پیکربندی)، تلاش می‌کند تا تنظیمات پیش‌فرض منطقی و کاربردی را برای پروژه‌های توسعه نرم‌افزار ارائه دهد. این رویکرد به توسعه‌دهندگان اجازه می‌دهد تا بدون صرف زمان زیاد برای پیکربندی‌های اولیه، سریع‌تر به توسعه‌ی ویژگی‌های جدید بپردازند.DDD در Django.راهنمای سبک اعمال Domain-Driven Design (طراحی دامنه-محور) در Django.پیشینه Domain-Driven Design.DDD یک رویکرد توسعه نرم افزار است که تمرکز اصلی آن بر روی مدل سازی دقیق دامنه (Domain) کسب وکار است. اریک اوانز در کتاب خود به نام"Domain-Driven Design: Tackling Complexity in the Heart of Software"این مفاهیم را معرفی کرد.مفاهیم کلیدی DDD از دیدگاه فاولر:.الف) Domain Modelمدل دامنه نمایش انتزاعی از دانش و فعالیت های مربوط به یک حوزه خاص کسب وکار است. این مدل باید:- مفاهیم و روابط کلیدی حوزه را منعکس کند.- به زبان کسب وکار (نه زبان فنی) بیان شود.- به صورت اشیاء و عملیات پیاده سازی شود.در این راهنمای سبک، مدل دامنه به جای اینکه فقط در مدلهای Django قرار گیرد، در لایه های خاص خود سازماندهی میشود.ب) Ubiquitous Language (زبان همه جا حاضر)یک زبان مشترک بین توسعه دهندگان و متخصصان حوزه که در تمام مراحل توسعه استفاده میشود. این زبان باید:- در کد، اسناد و گفتگوها یکسان باشد.- از اصطلاحات فنی غیرضروری پرهیز کند.- مفاهیم حوزه را دقیقاً همانطور که متخصصان حوزه می فهمند بیان کند.در این راهنمای سبک، نام کلاسها، متدها و ماژول ها باید از این زبان پیروی کنند.استفاده از اصطلاحات کسب وکار در نام گذاری:مثال: ()Order.is_eligible_for_discount به جای ()Order.check_discount .ج) Multiple Canonical modelsدر سیستم های بزرگ، یک مدل واحد برای کل سیستم ممکن است بسیار پیچیده شود. DDD پیشنهاد میکند از چندین مدل متعارف استفاده شود که هر کدام بخش خاصی از سیستم را با دیدگاه خاصی مدل سازی میکنند.در این راهنمای سبک، این مفهوم با تقسیم سیستم به حوزه های مستقل (Bounded Contexts) پیاده سازی میشود.مثال: مدل User در حوزه orders ممکن است با مدل User در حوزه payments متفاوت باشد.د) Bounded Context (حوزه محدود)مرز مشخصی که در آن یک مدل دامنه خاص معنا پیدا میکند و تعاریف دقیق دارد. ویژگی های کلیدی:- هر حوزه محدود مسئولیت های مشخصی دارد.- مدل های مختلف می توانند در حوزه های محدود مختلف تعاریف متفاوتی داشته باشند.- ارتباط بین حوزه ها باید به دقت مدیریت شود.در این راهنمای سبک، هر حوزه محدود به عنوان یک اپلیکیشن Django جداگانه پیاده سازی میشود.اصول کلیدی در پیاده سازی:1. جداسازی حوزه ها: هر حوزه کسب وکار (مانند سفارشات، محصولات) باید در ماژول خود قرار گیرد و وابستگی حداقلی به دیگر حوزه ها داشته باشد.2. تمرکز بر : Domain Logic منطق کسب وکار باید در سرویس ها و مدل های دامنه قرار گیرد، نه در ویوها یا کنترلرها.3. استفاده از الگویRepository : برای جداسازی لایه دسترسی به داده از لایه منطق کسب وکار.4. تعریف واضح مرزها: ارتباط بین حوزه ها باید از طریق واسط های تعریف شده و واضح انجام شود.5. تست پذیری: با جداسازی مناسب لایه ها، نوشتن تست های واحد آسان تر میشود.توضیح مدلسازی معماری با نمودار های UML :1. اینترفیس ها: شامل کنترلرهای API و ویوهای وب که به عنوان نقطه ورود سیستم عمل میکنند.2. سرویس های حوزه: حاوی منطق کسب وکار و از طریق واسط های تعریف شده با لایه های دیگر ارتباط برقرار میکنند.3. Repositoryها : مسئول دسترسی به داده ها و جداسازی لایه ذخیره سازی از منطق کسب وکار.4. مدل ها: نمایش مفاهیم حوزه با استفاده از Ubiquitous Language.5. هسته مشترک ( Shared Kernel ) : شامل قابلیت های مشترک بین چندین حوزه.مزایای این معماری:1. قابلیت نگهداری: تغییر در یک حوزه تأثیر کمی بر حوزه های دیگر دارد.2. قابلیت تست: هر جزء را میتوان به صورت مستقل تست کرد.3. انعطاف پذیری: میتوان تکنولوژی های مختلف را برای حوزه های مختلف انتخاب کرد.4. مقیاس پذیری: هر حوزه را می توان به صورت مستقل مقیاس داد.5. شفافیت: ساختار کد منعکس کننده ساختار کسب وکار است.نتیجه گیریاعمال اصول DDD در Django نیاز به تغییر در شیوه سنتی توسعه دارد، اما مزایای آن در پروژه های متوسط و بزرگ کاملاً محسوس است. این راهنمای سبک با معرفی ساختار مبتنی بر حوزه های محدود، جداسازی مسئولیت ها و تعریف واسط های واضح ، به ایجاد سیستم های قابل نگهداری، انعطاف پذیر و متناسب با نیازهای کسب وکار کمک میکند. مدل سازی مناسب با ) UML مانند نمودارهای کامپوننت( به درک بهتر روابط بین اجزا و طراحی دقیق تر معماری کمک میکند.انجمن.از سپتامبر سال ۲۰۰۸ تا به امروز، هر نیم‌سال کنفرانسی به نام «DjangoCon» برای توسعه دهندگان جنگو و کاربران آن برگزار می‌شود. همچنین کنفرانس «DjangoCon» سالیانه در ماه مه و ژوئن در اروپا و به‌طور مشابه، در اوت و سپتامبر در شهرهای مختلف آمریکا برگزار می‌شود.محل و تاریخ کنفرانس‌های برگزار شده DjangoCon تا به امروز:تبدیل به زبان‌های برنامه‌نویسی دیگر.برنامه نویسان، قالب الگوی جنگو را از پایتون به زبان‌های برنامه‌نویسی دیگر تبدیل کرده و از قابلیت چندسکویی نیز پشتیبانی می‌کنند. برخی از این موارد تبدیل‌های مستقیم از جنگو هستند اما برخی دیگر، اگرچه از مفاهیم جنگو الهام گرفته‌اند اما آزادی عمل برای تغیر دادن از ماهیت جنگو در آن‌ها هموار شده‌است:پیوند به بیرون.وبسایت رسمی جنگو