Django Node.js Alternative – DEV Community

با ظهور خدمات مبتنی بر ابر، نیاز به چارچوب های وب مدرن بیش از هر زمان دیگری مرتبط است. دو تا از این فریم ورک های وب NestJS و Django هستند. در این مقاله، مزایای انتقال از پشته جنگو به پشته NestJS را توضیح خواهم داد، به ویژه هنگامی که با Amplication ترکیب می شود.
نقش جنگو در اکوسیستم توسعه وب
همانطور که در مستندات آن توضیح داده شده است: “جانگو یک چارچوب وب سطح بالا پایتون است که توسعه سریع و طراحی تمیز و عملی را تشویق می کند.” جنگو دارای بسیاری از ویژگیهای داخلی است که شما را از مسئولیتهای بیاهمیت رها میکند، بنابراین میتوانید بر پیادهسازی منطق تجاری پشت سرویس خود تمرکز کنید. برخی از این توکارها عبارتند از:
-
یک ORM کامل (نقشهنگار شی رابطهای) که دادهها و مهاجرتهای طرحواره را پوشش میدهد و به شما امکان میدهد مدل دادههای خود را بر اساس کد پایتون تعریف کنید.
-
یک برنامه مدیریت خارج از جعبه برای مدیریت مدل های مبتنی بر پایگاه داده.
-
یک موتور قالب برای مدیریت و گسترش لایه ارائه.
-
یک کتابخانه فرم برای اعتبارسنجی داده های ارسالی توسط کاربر و تبدیل آن به انواع پایتون.
جنگو یک بازیگر مهم در اکوسیستم توسعه وب امروزی است. این توسط شرکت هایی با اندازه های مختلف استفاده می شود. به عنوان مثال، گوگل از آن برای وبلاگ های ابری و بازاریابی خود و واشنگتن پست برای سیستم محتوای اصلی خود استفاده می کند. آنچه جنگو را به یک بازیگر قوی برای پشته های وب تبدیل می کند، به نظر من، جامعه بزرگ و فعال آن به همراه کتابخانه هایی برای گسترش قابلیت های آن (برنامه های جنگو) است. من درخشش جنگو را در سناریوهایی مانند:
-
توسعه وبلاگ های سازمانی. بدون شک، سیستمهایی مانند Wagtail یا Django CMS امکان استقرار سیستمهای محتوای ویژه را میدهند.
-
توسعه نمونه های اولیه. از آنجایی که همراه با باتریها ارائه میشود، میتوانید به سرعت سیستمهای اولیه را نمونهسازی کنید و ایدههای تجاری را بدون نیاز به سرمایهگذاری زیاد روی یک پشته فناوری اعتبارسنجی کنید.
-
توسعه API های REST. با تشکر از Django REST، میتوانید یک لایه API آرامش بخش را با تلاش متوسط به سرویس خود اضافه کنید.
NestJS به عنوان یک جایگزین
افزایش مشخصی در استفاده از جاوا اسکریپت و تایپ اسکریپت بین سالهای 2021 و 2022 وجود داشت. همین بررسی Stack Overflow همچنین نشان میدهد که چارچوبهای مبتنی بر جاوا اسکریپت در 5 رتبه برتر در جامعه توسعهدهندگان قرار دارند، به این معنی که تیمها به جاوا اسکریپت تغییر میکنند (یا قبلاً از آن استفاده میکنند). پشته های مبتنی بر – از جمله طیف باطن با Node.js.
به احتمال زیاد، برخی از آن تیم ها با چالش یافتن جایگزین جنگو برای اکوسیستم Node.js مواجه شده اند که کار آسانی نیست. به همین دلیل، در این بخش، میخواهم NestJS را معرفی کنم، جایگزینی قوی برای جنگو با مجموعهای از ویژگیهای متفاوت که آن را برای توسعهدهندگان وب بسیار جذاب میکند.
ویژگی های اصلی NestJS
به نظر من، ویژگی های NestJS زیر مهم ترین هستند:
پشتیبانی شده توسط یک زمان اجرا بالغ
NestJS روی Node.js اجرا میشود، محیط اجرای متعارف برای برنامههای سمت سرور که با جاوا اسکریپت نوشته شدهاند. معماری کنونی Node.js ساختارهای اساسی را ارائه میکند که ویژگیهای همگام سطح بالایی مانند تماسها، وعدهها و رسیدگی به درخواستهای همگام را به شما میدهد. همه این ساختارها آن را به یک زمان اجرا بسیار کارآمد برای برنامه های I/O-intensive تبدیل می کند.
انعطاف پذیری واقعی
میتوانید اجزای اصلی را در NestJS برای بستههای انتخابی خود جایگزین کنید. به دلیل سطح انتزاعی که NestJS ارائه می دهد، شما به عنوان یک توسعه دهنده می توانید انتخاب کنید که از کدام ویژگی ها و کتابخانه های شخص ثالث می خواهید استفاده کنید و کدامیک را نه. این باعث می شود در صورت نیاز یک برنامه NestJS سبک تر شود. به عنوان مثال، در NestJS، می توانید ORM مورد نظر خود را برای کار با آن انتخاب کنید.
آماده سازمانی
در NestJS، از TypeScript به عنوان یک زبان استفاده می کنید. TypeScript مکانیسم هایی را برای بیان برنامه خود از نظر کلاس ها، رابط ها و انواع در اختیار شما قرار می دهد. این ساختارها و سایر ساختارها به شما امکان می دهند الگوهای برنامه نویسی شی گرا، عملکردی و واکنشی را راحت تر از سایر زبان های تفسیر شده اعمال و ترکیب کنید. به عنوان مثال، شما می توانید به راحتی برخی از الگوهای OOP را در TypeScript با استفاده از رابط های برنامه نویسی ترسیم کنید، در حالی که در پایتون، برای رسیدن به آن باید به کلاس های انتزاعی تکیه کنید.
مدرن و متمرکز بر بهره وری
از آنجایی که NestJS به شدت از Angular الهام گرفته شده است، NestJS مجموعه قدرتمندی از دکوراتورها را ارائه میکند که میتوان از آنها برای تعریف کنترلکنندهها، سرویسها و سایر عناصر به روشی مختصر و رسا استفاده کرد. NestJS همچنین دارای چندین کتابخانه داخلی و ابزارهایی مانند ورود به سیستم، اعتبارسنجی و آزمایش است. این بدان معنی است که توسعه دهندگان می توانند زمان کمتری را برای راه اندازی صرف کنند. در این زمینه، NestJS را می توان به عنوان باتری های گنجو در نظر گرفت.
همه کاره
شما می توانید انواع برنامه های سمت سرور را بسازید و موارد استفاده ای را که جنگو به طور سنتی پوشش می داد را پوشش دهد.
در کد چگونه به نظر می رسد؟
در این بخش NestJS را با استفاده از مولد CRUD آن به شما معرفی می کنم. بیایید تصور کنیم که یک نمونه اولیه از یک REST API برای یک کتابفروشی به ما وظیفه داده شده است. چگونه می توانیم یک برنامه NestJS را برای این کار بوت استرپ کنیم؟ اجازه بدید ببینم.
ابتدا مطمئن شوید که بسته NestJS CLI را نصب کرده اید:
npm i -g @nestjs/cli
اکنون برنامه NestJS را ایجاد کنید:
nest new --strict book-app
دستور قبلی یک برنامه داربست NestJS را در فهرست کتاب-برنامه ایجاد می کند. داربست عناصر اصلی را برای داشتن یک برنامه قابل اجرا فراهم می کند. این بدان معناست که شما یک کنترلر، ماژول و سرویس عمومی و قابل اجرا دریافت خواهید کرد که همه آنها با TypeScript نوشته شده اند. شما می توانید برنامه را با:
npm run start:dev
اگر مرورگر خود را در http://localhost:3000/ بررسی کنید، باید یک پیام زیبای “سلام جهان” را ببینید. اکنون، از آنجایی که وظیفه ما ایجاد یک نمونه اولیه برای API است، میتوانیم از مولد CRUD برای ایجاد تمام هماهنگیهای مورد نیاز برای داشتن نقاط پایانی مورد نیاز که مربوط به ایجاد، جستجو، بهروزرسانی و حذف یک موجودیت اصلی به نام کتاب است، استفاده کنیم. :
شکل 1: مولد CRUD برای موجودیت کتاب
متوجه خواهید شد که تمام فایلهای تولید شده، کتابهای موجودیت را بهعنوان پایه میگیرند: کنترلکننده، ماژول، سرویس، DTOهای مربوطه و خود موجودیت (مدل). همه آن اجزا به گونه ای تولید شده اند که با یک مولفه بالایی مناسب و به دنبال معماری لایه ای و مدولار در تعامل باشند. به عنوان مثال، به ماژول سرویس نگاهی بیندازید:
شکل 2: ماژول خدمات برای موجودیت کتاب
توجه داشته باشید که چگونه خود سرویس به صورت تزریقی پیکربندی شده است.
در نهایت، می توانید همان الگوی لایه ای را در کنترلر ببینید:
شکل 3: ماژول کنترل کننده برای موجودیت کتاب
کنترلر با تمام عملیات مشترکی که برای تکمیل یک REST API اساسی در اطراف نهادی که انتخاب کرده اید نیاز دارید وارد می شود. این فوقالعاده است، زیرا ویژگی مولد CRUD نه تنها کدی را برای داشتن یک CRUD تحت یک REST API ایجاد میکند، بلکه آن را با استفاده از معماری ماژولار از طریق الگوهایی مانند دکوراتور، تزریق وابستگی، ماژولها و غیره ایجاد میکند.
حرکت بعدی: تقویت
NestJS هنگامی که با Amplication استفاده میشود جذابتر به نظر میرسد، یک پلتفرم توسعه برنامه که به شما امکان میدهد بدون اتلاف وقت برای کارهای تکراری کدنویسی، پشتیبانهای Node.js آماده تولید بسازید. Amplication از NestJS در زیر برای باطن و ReactJS برای فرانت اند استفاده می کند.
اجازه دهید از طریق مزایای اصلی که ارائه می دهد به شما نشان دهم چگونه کار می کند.
تولید کد
هنگامی که یک برنامه با Amplication ایجاد می کنید، پلتفرمی در اختیار شما قرار می گیرد که به شما امکان می دهد موجودیت ها، نقش ها و مجوزها را برای آن موجودیت ها تعریف کنید. و از این رو، پلتفرم نه تنها کد را برای خود موجودیتها، بلکه برای لایههای بالایی مانند DTO، سرویسها، کنترلکنندهها و ماژولها نیز تولید میکند.
Amplication به شما این امکان را می دهد که با استفاده از یک رابط کاربری ساده و تمیز به راحتی کل برنامه ها را بسازید. همچنین یک نمای کد ارائه می دهد که تمام کدهای تولید شده برای اجزایی که ایجاد کرده اید را به شما نشان می دهد. علاوه بر این، داربست تولید شده توسط Amplication نه تنها شامل NestJS، بلکه مجموعهای از ابزارهای محبوب دیگر از اکوسیستم جاوا اسکریپت است که با هم یک برنامه سرور قوی میسازند.
ادغام GitHub
هنگامی که با مؤلفههایی که ایجاد کردهاید راحت شدید، میتوانید تغییرات خود را همانجا از رابط کاربری مقایسه و انجام دهید. Amplication نسخه جدیدی از سرویس شما را به همراه یک درخواست کشش جدید در GitHub ایجاد می کند تا همکاران شما بتوانند مشارکت های شما را از منظر کد بررسی کنند.
سفارشی سازی کد
با تمام دیگ بخار ایجاد شده برای شما، می توانید در مرحله بعد بنشینید و منطق کسب و کار خود را پیاده سازی کنید. Amplication راه های مختلفی برای انجام این کار ارائه می دهد:
-
افزودن کد خود مستقیماً به لایه سرویس، کنترلر یا GraphQL Query Resolver. آن فایل ها یک بار ایجاد می شوند، بنابراین می توانید با خیال راحت تغییرات خود را اضافه کنید زیرا Amplication آنها را لغو نمی کند.
-
ایجاد DTO های سفارشی؛ هنگامی که DTO های پیش فرض کوتاه می شوند، می توانید موارد سفارشی را برای پوشش نیازهای خاص خود ایجاد کنید.
-
پیاده سازی افزونه ای که به شما امکان می دهد عملکرد برنامه تولید شده خود را گسترش دهید. میتوانید از افزونههای خود استفاده کنید یا از افزونههایی که قبلاً منتشر شدهاند استفاده کنید.
بسته بندی
امیدوارم شما را متقاعد کرده باشم که NestJS در توسعه راهحلهای پشتیبانی قوی و تمام مزایایی که با ترکیب با Amplication به دست میآورید چقدر مفید است. اگر میخواهید به اکوسیستم Node.js منتقل شوید و از یک پشته مبتنی بر جنگو آمدهاید، NestJS با Amplication انتخاب مناسبی است اگر میخواهید روی ایجاد منطق کسبوکار خود تمرکز کنید و از اتلاف وقت برای هماهنگی لازم برای توسعه و استقرار جلوگیری کنید. برنامه های کاربردی وب
به یاد داشته باشید که به انجمن توسعه دهندگان ما در Discord بپیوندید. اگر پروژه و کاری که ما انجام می دهیم را دوست دارید، به ما یک ستاره در GitHub بدهید!