پیاده سازی یک معماری پاک با Nest.JS PlatoBlockchain Intelligence. جستجوی عمودی Ai.

پیاده سازی یک معماری پاک با Nest.JS

این مقاله برای علاقه مندانی است که در تلاش برای نوشتن کدهای تمیز، مقیاس پذیر و مهمتر از آن قابل اصلاح هستند. این ایده در مورد اینکه Nest.JS چگونه می‌تواند به ما در نوشتن کدهای تمیز کمک کند و معماری زیربنایی که استفاده می‌کند، می‌دهد.

پیاده‌سازی یک معماری تمیز با Nest.JS ما را ملزم می‌کند که ابتدا بفهمیم این چارچوب چیست و چگونه کار می‌کند.

Nest یا Nest.JS چارچوبی برای ساخت برنامه‌های Node.js کارآمد و مقیاس‌پذیر (در سمت سرور) است که با TypeScript ساخته شده است. از Express یا Fastify استفاده می کند و به توسعه دهندگان اجازه می دهد تا از مقدار زیادی ماژول (شخص ثالث) در کد خود استفاده کنند.

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

خوب، همه شما ممکن است از معماری MVC استفاده کرده باشید یا حداقل نام آن را شنیده باشید. MVC مخفف Model, View, Controller است. ایده پشت این کار این است که ساختار پروژه خود را به 3 بخش مختلف جدا کنیم.

1 مدل: حاوی فایل Object است که با Relation/Documents در DB نگاشت می شود.

2. کنترل کننده: این کنترل کننده درخواست است و مسئولیت اجرای منطق تجاری و تمام دستکاری داده ها را بر عهده دارد.

3. مشاهده: این بخش حاوی فایل هایی است که مربوط به نمایش داده ها هستند، چه فایل های HTML یا برخی از فایل های موتور قالب.

برای ایجاد یک مدل، به نوعی ابزار/ماژول/کتابخانه ORM/ODM برای ساختن آن نیاز داریم. برای مثال، اگر مستقیماً از ماژول استفاده می‌کنید، بیایید «Sequelize» را بگوییم، و سپس از همان برای پیاده‌سازی لاگین در کنترلر خود استفاده کنید و منطق کسب‌وکار اصلی خود را به «Sequelize» وابسته کنید. حالا، فرض کنید بعد از 10 سال، ابزار بهتری در بازار وجود دارد که می‌خواهید از آن استفاده کنید، اما به محض اینکه sequelise را با آن جایگزین کردید، باید تعداد زیادی از خطوط کد را تغییر دهید تا از بروز آن جلوگیری کنید. شکستن همچنین، باید همه ویژگی‌ها را یک بار دیگر آزمایش کنید تا بررسی کنید که آیا با موفقیت اجرا شده است یا خیر که ممکن است زمان و منابع ارزشمندی را نیز هدر دهد. برای غلبه بر این چالش، می‌توانیم از آخرین اصل SOLID که Dependency Inversion Principle است و تکنیکی به نام تزریق وابستگی برای جلوگیری از چنین آشفتگی استفاده کنیم.

هنوز گیج هستید؟ بگذارید مفصل توضیح دهم.

بنابراین، آنچه Dependency Inversion Principle به زبان ساده می گوید این است که شما منطق اصلی کسب و کار خود را ایجاد می کنید و سپس وابستگی را حول آن ایجاد می کنید. به عبارت دیگر منطق اصلی و قوانین تجاری خود را از هر نوع وابستگی رها کنید و لایه های بیرونی را طوری اصلاح کنید که به جای منطق شما وابسته به این باشد. معماری پاک یعنی همین. این وابستگی را از منطق اصلی کسب و کار شما خارج می کند و سیستم را حول آن به گونه ای می سازد که به نظر می رسد به جای اینکه به آنها وابسته باشد، به آن وابسته هستند.

بیایید سعی کنیم این را با نمودار زیر درک کنیم.

منبع: مخروط معماری پاک 

می بینید که ما معماری خود را به 4 لایه تقسیم کرده ایم:

1. نهادها: در هسته آن، موجودیت ها مدل هایی هستند (قوانین سازمانی) که قوانین سازمانی شما را تعریف می کنند و می گویند برنامه در مورد چیست. این لایه به سختی در طول زمان تغییر می کند و معمولاً انتزاعی است و مستقیماً قابل دسترسی نیست. به عنوان مثال، هر برنامه یک "کاربر" دارد. همه فیلدهایی که کاربر باید ذخیره کند، انواع آنها و روابط با سایر موجودیت ها شامل یک موجودیت است.

2. موارد استفاده: به ما می گوید که چگونه می توانیم قوانین سازمانی را اجرا کنیم. بیایید دوباره کاربر را مثال بزنیم. اکنون می دانیم که روی چه داده هایی باید عمل کنیم، مورد استفاده به ما می گوید که چگونه بر روی این داده ها کار کنیم، مانند اینکه کاربر رمز عبوری خواهد داشت که باید رمزگذاری شود، کاربر باید ایجاد شود، و رمز عبور را می توان در هر زمانی تغییر داد. زمان معین و غیره

3. کنترلرها / دروازه ها: اینها کانال هایی هستند که به ما کمک می کنند تا موارد استفاده را با استفاده از ابزارهای خارجی و کتابخانه ها با استفاده از تزریق وابستگی پیاده سازی کنیم.

4. ابزارهای خارجی: تمام ابزارها و کتابخانه‌هایی که برای ساختن منطق خود استفاده می‌کنیم، در زیر این لایه قرار می‌گیرند. ORM، ایمیل، رمزگذاری و غیره

ابزارهایی که ما استفاده می کنیم بستگی به نحوه هدایت آنها به موارد استفاده دارد و به نوبه خود، موارد استفاده به نهادهایی که هسته اصلی تجارت ما هستند بستگی دارد. به این ترتیب وابستگی را از بیرون به درون معکوس کرده ایم. این همان چیزی است که Dependency Inversion Principal SOLID به آن اشاره می کند.

بسیار خوب، تا به حال، شما به اصل Nest.JS پی برده اید و متوجه شده اید که معماری تمیز چگونه کار می کند. حال این سوال پیش می آید که این دو چگونه به هم مرتبط هستند؟  

بیایید سعی کنیم بفهمیم 3 بلوک سازنده Nest.JS چیست و هر کدام از آنها چه کاری انجام می دهند.

  1. ماژول ها: ساختار Nest.JS به گونه ای است که می توانیم هر ویژگی را به عنوان یک ماژول در نظر بگیریم. به عنوان مثال، هر چیزی که با کاربر مرتبط است مانند مدل‌ها، کنترل‌کننده‌ها، DTO، رابط‌ها و غیره، می‌تواند به عنوان یک ماژول جدا شود. یک ماژول دارای یک کنترلر و دسته ای از ارائه دهندگان است که عملکردهای تزریقی مانند خدمات، orm، ایمیل و غیره هستند.
  1. کنترل کننده ها: کنترلرها در Nest.JS رابط بین شبکه و منطق شما هستند. آنها برای رسیدگی به درخواست‌ها و برگرداندن پاسخ‌ها به سمت مشتری برنامه (به عنوان مثال، فراخوانی به API) استفاده می‌شوند.
  1. ارائه دهندگان (خدمات): ارائه‌دهندگان خدمات/عملکردهای تزریقی هستند که می‌توانیم آن‌ها را به کنترل‌کننده‌ها و سایر ارائه‌دهندگان تزریق کنیم تا انعطاف‌پذیری و عملکرد اضافی را ارائه دهیم. آنها هر شکلی از پیچیدگی و منطق را انتزاع می کنند.

خلاصه ،

  • ما کنترل کننده هایی داریم که به عنوان رابط عمل می کنند (لایه سوم معماری تمیز)
  • ما ارائه دهندگانی داریم که می توانند برای ارائه عملکرد (لایه چهارم معماری تمیز: DB، دستگاه ها و غیره) تزریق شوند.
  • ما همچنین می‌توانیم سرویس‌ها و مخازن را برای تعریف مورد استفاده خود ایجاد کنیم (لایه دوم)
  • ما می توانیم موجودیت های خود را با استفاده از ارائه دهندگان DB (لایه 1) تعریف کنیم.

نتیجه:

Nest.JS یک فریمورک قدرتمند Node.JS و شناخته شده ترین تایپ اسکریپت موجود امروزی است. اکنون که در مورد این فریم ورک پایین آمده اید، باید از خود بپرسید که آیا می توانیم از آن برای ساخت یک ساختار پروژه با معماری تمیز استفاده کنیم. خوب. جواب بله است! کاملا. چگونه؟ در سری بعدی این مقاله توضیح خواهم داد. 

تا آن زمان، با ما همراه باشید!

درباره نویسنده:

Junaid Bhat در حال حاضر به عنوان سرپرست فناوری در Mantra Labs کار می کند. او یک علاقه‌مند به فناوری است که هر روز با پیروی از استانداردهای صنعت و همسو شدن با رویکرد ساختارمندتر برای حل مشکلات، تلاش می‌کند تا مهندس بهتری شود. 

آخرین وبلاگ ما را بخوانید: چارچوب Golang-Beego و کاربردهای آن

دانشی که ارزش ارائه را در صندوق ورودی شما دارد

تمبر زمان:

بیشتر از آزمایشگاه های مانترا