omid.saifpanahi1991
omid.saifpanahi1991
خواندن ۳ دقیقه·۱۱ روز پیش

ساخت فریمورک nodejs


یکی از بهترین کارها برای یادگیری Node.js ساخت یک framework بک اند هست.

البته Framework که نمیشه گفت بلکه یه سری از ابزارها رو سر هم می کنیم و یک ساختار پروژه مطلوب خودمون میسازیم.

فقط یه نکته رو بگم که این کار رو برای یادگیری انجام میدهیم.

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

بنابراین هدف این تمرین فقط یادگیری است نه قدرت نمایی.


سوال هایی که تو ساخت این framework پیش میاد:

۱. چرا به یک فریم ورک جدید نیاز داریم؟
- آیا به performance بیشتری نسبت به Express یا NestJS نیاز داریم؟
- آیا نیاز داریم که پروژه سبک تر باشد؟
- آیا بر روی مایکروسرویس یا REST یا GraphQL یا WebSocket ها تمرکز کرده ایم؟
- آیا نیاز داریم که authentication و caching درونی داشته باشیم؟

برای چه کسی این فریم ورک رو میسازیم؟
برای خودمان، تیممان یا جامعه متن باز


۲. تصمیم های معماری

سیستم Routing
- آیا از middleware ها مانند express یا از controller ها مانند NestJS برای routing استفاده می کنیم؟
- آیا route ها dynamic یا static خواهند بود؟

مدیریت middleware
- آیا middleware chaining مانند app.use خواهیم داشت؟
- آیا سیستم plugin برای گسترش خواهیم ساخت؟

مدیریت request و response
- آیا نیازه که از ماژول های native http استفاده کنیم یا آنها را wrap می کنیم؟

استفاده از dependency injection
- آیا مانند NestJS ماژولار یا مانند Fastify سبک خواهد بود؟

مدیریت config
- آیا از .env پشتیبانی خواهیم کرد؟
- آیا اجازه config injection در زمان اجرا خواهیم داشت؟

اجرای Async
- آیا async/await کاملا پشتیبانی میشود؟
- آیا معماری event-driven خواهیم ساخت؟

مدیریت Error و لاگ ها
- آیا پاسخ های خطا استاندارد شده خواهیم داشت؟
- آیا به صورت مرکزی Logging خواهیم داشت؟

۳. نکات Performance

بهینه سازی سرعت
- آیا از http.createServer استفاده می کنیم یا آن را wrap می کنیم
- بهینه سازی مدیریت Event loop

توزیع بار و clustering
- آیا باید از چند process پشتیبانی کند؟
- آیا پشتیبانی داخلی از Worker thread ها و ماژول cluster دارد؟

مدیریت حافظه
- جلوگیری از memory leak در middleware
- استفاده از performance hooks برای benchmarking


۴. نکات مقیاس پذیری
مایکروسرویس ها و سیستم های توزیع شده
- آیا نیازه که IPC و WebSocket و gRPC پشتیبانی شود؟

مدیریت database
- آیا از ORM خاصی مانند Prisma یا TypeORM استفاده می کند یا انتخاب آزاد است؟

سیستم Caching
- آیا cache داخل حافظه دارد؟
- آیا برای static content پاسخ ها را cache می کند؟

کارهای background
- آیا از Kue/BullMQ برای کارهای پسزمینه استفاده می کند؟


۵. نکات امنیتی
- سیستم درونی JWT
- استفاده از middleware برای CORS یا Rate Limiting
- برای جلوگیری از SQL Injection و XSS چکار می کنیم؟

تست نویسی و Debugging
- آیا از فریم ورک test خاصی استفاده می کنیم؟
- آیا از structured logging استفاده می کنیم؟

نسخهبندی و API stability
- آیا از API Versioning پشتیبانی می کند؟
- آیا استراتژی برای backward compatibility داریم؟

فریم ورک
شاید از این پست‌ها خوشتان بیاید