🚀 سری ۵ قسمتی : معماریهای کلاس جهانی در Next.js 🟢
پارت ۱ — معماری Bulletproof (سپر ضد گلوله)
خیلی ساده ساده بگم، وقتی پروژه استارتاپت داره سریع بزرگ میشه، کدهات خیلی راحت تبدیل به اسپاگتی کد میشن. معماری Bulletproof (ضد گلوله) اومده که جلوی این کثیف کاری رو بگیره.
ایده اصلی اینه : هر ویژگی (Feature) برای خودش یه کشور مستقله.
به جای اینکه تمام کامپوننتهای کل سایت رو بریزی تو یه پوشه، تمام هوکها رو تو یه پوشه دیگه و... میای هر فیچر رو با تمام مخلفاتش یه جا جمع میکنی.
اینجوری اگه کسی خواست روی سیستم "نظرات" کار کنه، دقیقا میدونه باید بره تو کدوم پوشه و نیازی نیست کل پروژه رو شخم بزنه.
ساختار فولدرها تو دنیای واقعی این شکلیه :
همینقدر ساده و شیک و بدون پیچیدگی زیاد 🟢
یکی از ساده ترین معماری و ساختارهای توی پروژههای نکست شناخته میشه 🚀
#Labs_Next5Architecture
پارت ۱ — معماری Bulletproof (سپر ضد گلوله)
خیلی ساده ساده بگم، وقتی پروژه استارتاپت داره سریع بزرگ میشه، کدهات خیلی راحت تبدیل به اسپاگتی کد میشن. معماری Bulletproof (ضد گلوله) اومده که جلوی این کثیف کاری رو بگیره.
ایده اصلی اینه : هر ویژگی (Feature) برای خودش یه کشور مستقله.
به جای اینکه تمام کامپوننتهای کل سایت رو بریزی تو یه پوشه، تمام هوکها رو تو یه پوشه دیگه و... میای هر فیچر رو با تمام مخلفاتش یه جا جمع میکنی.
اینجوری اگه کسی خواست روی سیستم "نظرات" کار کنه، دقیقا میدونه باید بره تو کدوم پوشه و نیازی نیست کل پروژه رو شخم بزنه.
ساختار فولدرها تو دنیای واقعی این شکلیه :
src/
├── components/ # فقط دکمهها و اینپوتهای عمومی کل سایت
├── lib/ # تنظیمات کلی مثل کلاینت Axios
├── features/ # 👈 قلب تپنده پروژه
│ ├── comments/ # جزیره مستقل نظرات
│ │ ├── api/ # ریکوئستهای مربوط به نظرات
│ │ ├── components/ # کامپوننتهای مخصوص همین بخش
│ │ ├── hooks/ # لاجیک و استیتهای نظرات
│ │ └── types/ # تایپهای تایپاسکریپت این بخش
│ └── auth/ # جزیره مستقل لاگین و ثبتنام
└── app/ # فقط وصل کردن فیچرها به روتهای Next.js
همینقدر ساده و شیک و بدون پیچیدگی زیاد 🟢
یکی از ساده ترین معماری و ساختارهای توی پروژههای نکست شناخته میشه 🚀
#Labs_Next5Architecture
❤3
🚀 سری ۵ قسمتی : معماریهای کلاس جهانی در Next.js 🟡
پارت ۲ — ساختار Feature-Sliced Design (FSD)
وقتی پروژهات انقدر بزرگ و خفن شده که حتی مدل Bulletproof هم جواب نمیده، باید بری سراغ FSD. این معماری الان تو خیلی از شرکتهای بزرگ ترنده.
تو FSD ما با یه سیستم طبقاتی بهشدت سختگیرانه طرفیم. کدها تو لایههای مختلف چیده میشن و قانون جاذبه وجود داره : دیتا فقط از بالا به پایین میریزه!
مثلا لایه
نمای واقعی فولدربندی FSD :
👇 قانون FSD: کدها مثل طبقات یک برج ساخته میشن؛ هیچ طبقهای نباید بارِ خودش رو بندازه روی سقفِ طبقه بالایی!
#Labs_Next5Architecture
پارت ۲ — ساختار Feature-Sliced Design (FSD)
وقتی پروژهات انقدر بزرگ و خفن شده که حتی مدل Bulletproof هم جواب نمیده، باید بری سراغ FSD. این معماری الان تو خیلی از شرکتهای بزرگ ترنده.
تو FSD ما با یه سیستم طبقاتی بهشدت سختگیرانه طرفیم. کدها تو لایههای مختلف چیده میشن و قانون جاذبه وجود داره : دیتا فقط از بالا به پایین میریزه!
مثلا لایه
Features حق نداره از لایه Pages چیزی ایمپورت کنه. این کار باعث میشه کدهات به هم گره نخورن و وقتی یه جا رو دستکاری میکنی، یه جای بیربط دیگه باگ نده.نمای واقعی فولدربندی FSD :
src/
├── app/ # تنظیمات پایه، پروایدرها و استایلهای گلوبال
├── pages/ # ترکیب کردن دیتاها برای ساختن یک صفحه کامل
├── widgets/ # بلوکهای بزرگ UI (مثلاً کل هدر سایت با دکمههاش)
├── features/ # اکشنهای کاربر (مثلاً لایک کردن، لاگین کردن)
├── entities/ # موجودیتهای بیزینس (مدل دیتای User یا Product)
└── shared/ # آیکونها، یوتیلیتیها و دکمههای ساده
👇 قانون FSD: کدها مثل طبقات یک برج ساخته میشن؛ هیچ طبقهای نباید بارِ خودش رو بندازه روی سقفِ طبقه بالایی!
#Labs_Next5Architecture
صبح بخیر رفقای کدنویس ☕️
یه نقل قول معروف تو دنیای برنامهنویسی هست از دانالد کنوت (Donald Knuth) که میگه :
بهینهسازیِ زودرس، ریشه تمام بدیهاست (Premature optimization is the root of all evil)
خیلی وقتا روزا درگیر این میشیم که کدمون رو از همون خط اول پرفکت و فوقسریع بنویسیم. نتیجه؟ کدی مینویسیم که به شدت پیچیدهست، خوندنش سخته و آخرش هم اون فیچر کلا از پروژه حذف میشه ( اینقدر پیادهسازیش طول میکشه که فکر میکنی بهتره اصلا پیادهسازی نشه ) 😂
✅ قانون ۳ مرحلهای
1. اول کاری کن که فقط کار کنه ( Make it work )
2. بعد کاری کن که درست و تمیز کار کنه ( Make it right )
3. در نهایت اگه لازم بود، سریعش کن ( Make it fast )
شما تو کدوم مرحله بیشتر گیر میکنین؟
روز پرکدی داشته باشیمم 😉 💻
یه نقل قول معروف تو دنیای برنامهنویسی هست از دانالد کنوت (Donald Knuth) که میگه :
بهینهسازیِ زودرس، ریشه تمام بدیهاست (Premature optimization is the root of all evil)
خیلی وقتا روزا درگیر این میشیم که کدمون رو از همون خط اول پرفکت و فوقسریع بنویسیم. نتیجه؟ کدی مینویسیم که به شدت پیچیدهست، خوندنش سخته و آخرش هم اون فیچر کلا از پروژه حذف میشه ( اینقدر پیادهسازیش طول میکشه که فکر میکنی بهتره اصلا پیادهسازی نشه ) 😂
✅ قانون ۳ مرحلهای
1. اول کاری کن که فقط کار کنه ( Make it work )
2. بعد کاری کن که درست و تمیز کار کنه ( Make it right )
3. در نهایت اگه لازم بود، سریعش کن ( Make it fast )
شما تو کدوم مرحله بیشتر گیر میکنین؟
روز پرکدی داشته باشیمم 😉 💻
❤1👍1
🔥 چالش ظهرگاهی
جنگ زبانها 🔥
بچهها یه سناریوی خیلی ساده داریم که قراره تو سه تا زبان TypeScript, Python, و PHP اجرا بشه.
کدها ایناست :
🟡 تو جاوااسکریپت (JS) :
🔵 تو پیاچپی (PHP) :
🟢 تو پایتون (Python) :
❗️ سوال اینه
خروجی آرایه
توی نظرسنجی پایین جواب بدیم ببینیم چند نفر تفاوت رفتار زبانها رو تو مدیریت حافظه میدونن! 👇
جنگ زبانها 🔥
بچهها یه سناریوی خیلی ساده داریم که قراره تو سه تا زبان TypeScript, Python, و PHP اجرا بشه.
کدها ایناست :
🟡 تو جاوااسکریپت (JS) :
let a = [1, 2, 3];
let b = a;
b.push(4);
console.log(a);
🔵 تو پیاچپی (PHP) :
$a = [1, 2, 3];
$b = $a;
$b[] = 4;
print_r($a);
🟢 تو پایتون (Python) :
a = [1, 2, 3]
b = a
b.append(4)
print(a)
❗️ سوال اینه
خروجی آرایه
a توی این سه تا زبان به ترتیب چیه؟ 🤔توی نظرسنجی پایین جواب بدیم ببینیم چند نفر تفاوت رفتار زبانها رو تو مدیریت حافظه میدونن! 👇
کالبدشکافی چالش ظهر 🕵️♂️
دم اونایی که گزینه ۳ رو زدن جیز ❤️
اما چرا این اتفاق افتاد؟ داستان برمیگرده به اینکه زبانها چطور متغیرها رو توی حافظه کپی میکنن.
✅ توی Python و TypeScript (پاس دادن با رفرنس) : وقتی مینویسی
فقط میگه متغیر
✅ توی PHP (پاس دادن با مقدار - Copy on Write) : پیاچپی رفتار متفاوتی داره. وقتی مینویسی
پس تغییراتِ
این از اون باگهاییه که اگه حواست نباشه، ساعتها تو دیباگ کردنش پیر میشی 😅
از این چالشها بازم بریم؟ (با ریاکشن 🔥 نشون بدید).
دم اونایی که گزینه ۳ رو زدن جیز ❤️
اما چرا این اتفاق افتاد؟ داستان برمیگرده به اینکه زبانها چطور متغیرها رو توی حافظه کپی میکنن.
✅ توی Python و TypeScript (پاس دادن با رفرنس) : وقتی مینویسی
b = a، زبان نمیاد یه آرایه جدید بسازه❗️فقط میگه متغیر
b هم به همون آدرسِ a تو حافظه اشاره کنه. پس وقتی b رو تغییر میدی، در واقع داری همون آرایه اصلی رو دستکاری میکنی. (خروجی جفتشون شد ۱ تا ۴).✅ توی PHP (پاس دادن با مقدار - Copy on Write) : پیاچپی رفتار متفاوتی داره. وقتی مینویسی
$b = $a و بعد $b رو تغییر میدی، PHP همون لحظه یه کپیِ کاملا جدید از آرایه تو حافظه میسازه! پس تغییراتِ
$b هیچ ربطی به $a پیدا نمیکنه و آرایه اصلی دستنخورده میمونه. (خروجی شد ۱ تا ۳).این از اون باگهاییه که اگه حواست نباشه، ساعتها تو دیباگ کردنش پیر میشی 😅
از این چالشها بازم بریم؟ (با ریاکشن 🔥 نشون بدید).
🔥5
معرفی ابزار شبانه 🛠🌙
اگه از دست ارورها خسته شدی و دوست نداری هی ترمینال رو باز کنی تا ببینی کجای کارت ایراد داره، افزونه Error Lens تو VSCode دقیقا برای تو ساخته شده!
این اکستنشن چیکار میکنه؟ ارورها، هشدارها (Warnings) و مشکلات تایپاسکریپت/پایتون/پیاچپی رو به جای اینکه ببره تو پنل پایین، دقیقا همون خطی که کد نوشتی، با رنگ قرمز (یا زرد) و بولد شده بهت نشون میده
✨ اینجوری سرعت دیباگ کردنت حداقل ۲ برابر میشه.
🔗 لینک دانلود مستقیم از مارکتپلیس VSCode
شبتون بخیر رفقا، تا فردا و چالشهای جدید ✌️
اگه از دست ارورها خسته شدی و دوست نداری هی ترمینال رو باز کنی تا ببینی کجای کارت ایراد داره، افزونه Error Lens تو VSCode دقیقا برای تو ساخته شده!
این اکستنشن چیکار میکنه؟ ارورها، هشدارها (Warnings) و مشکلات تایپاسکریپت/پایتون/پیاچپی رو به جای اینکه ببره تو پنل پایین، دقیقا همون خطی که کد نوشتی، با رنگ قرمز (یا زرد) و بولد شده بهت نشون میده
✨ اینجوری سرعت دیباگ کردنت حداقل ۲ برابر میشه.
🔗 لینک دانلود مستقیم از مارکتپلیس VSCode
شبتون بخیر رفقا، تا فردا و چالشهای جدید ✌️
❤1
☀️ نقشه راه جاوااسکریپت ( حیاتی برای تازهکارها )
رفقا، برای تسلط واقعی به جاوااسکریپت، این ۵ سرفصل خط قرمزِ شماست. اگه اینا رو ندونی، درگیرِ باگهای بیانتها میشی :
1. ES6+ Features: (Destructuring, Spread/Rest, Arrow Functions)
2. Asynchronous JS: (Promises, Async/Await - قلبِ فچ کردن دیتا)
3. Scope & Closures: (درکِ رفتار حافظه)
4. The Event Loop: (چطوری JS با تردِ اصلی کار میکنه)
5. Array Methods: (map, filter, reduce - سلاحهای اصلی شما)
این لیست رو سیو کنید، هر وقت تو مسیرِ React یا Next.js گم شدید، برگردید به همین مباحث.
رفقا، برای تسلط واقعی به جاوااسکریپت، این ۵ سرفصل خط قرمزِ شماست. اگه اینا رو ندونی، درگیرِ باگهای بیانتها میشی :
1. ES6+ Features: (Destructuring, Spread/Rest, Arrow Functions)
2. Asynchronous JS: (Promises, Async/Await - قلبِ فچ کردن دیتا)
3. Scope & Closures: (درکِ رفتار حافظه)
4. The Event Loop: (چطوری JS با تردِ اصلی کار میکنه)
5. Array Methods: (map, filter, reduce - سلاحهای اصلی شما)
این لیست رو سیو کنید، هر وقت تو مسیرِ React یا Next.js گم شدید، برگردید به همین مباحث.
MDN Web Docs
JavaScript Guide - JavaScript | MDN
The JavaScript Guide shows you how to use JavaScript and gives an overview of the language. If you need exhaustive information about a language feature, have a look at the JavaScript reference.
🔥3
🚀 سری ۵ قسمتی : معماریهای کلاس جهانی در Next.js 🟠
پارت ۳ — معماری تمیز (Clean Architecture)
این همون معماری معروفیه که "عمو باب" (Uncle Bob) معرفیش کرد. تو پروژههای اینترپرایز که قراره ۱۰ سال عمر کنن، بزرگترین ترس اینه که یه روزی فریمورکها منقرض بشن!
معماری تمیز میگه : لاجیک بیزینس تو باید انقدر ایزوله باشه که اصلاًندونه داری از Next.js استفاده میکنی یا یه فریمورک دیگه.
ریاکت و نکست اینجا فقط حکمِ "ابزار نمایش" رو دارن. دیتابیس، API و UI همه میرن تو خارجیترین لایه، و هسته اصلی پروژه که قوانین بیزینسه، اون وسط امن و دستنخورده میمونه.
فولدربندی به سبک پیازی (Onion) :
#Labs_Next5Architecture
پارت ۳ — معماری تمیز (Clean Architecture)
این همون معماری معروفیه که "عمو باب" (Uncle Bob) معرفیش کرد. تو پروژههای اینترپرایز که قراره ۱۰ سال عمر کنن، بزرگترین ترس اینه که یه روزی فریمورکها منقرض بشن!
معماری تمیز میگه : لاجیک بیزینس تو باید انقدر ایزوله باشه که اصلاًندونه داری از Next.js استفاده میکنی یا یه فریمورک دیگه.
ریاکت و نکست اینجا فقط حکمِ "ابزار نمایش" رو دارن. دیتابیس، API و UI همه میرن تو خارجیترین لایه، و هسته اصلی پروژه که قوانین بیزینسه، اون وسط امن و دستنخورده میمونه.
فولدربندی به سبک پیازی (Onion) :
src/
├── domain/ # هسته مرکزی: فقط قوانین خالص، بدون هیییچ ایمپورتی از ریاکت
│ └── models/ # مثلاً قانون اینکه سبد خرید چطور محاسبه میشه
├── application/ # یوزکیسها: کارایی که کاربر میتونه بکنه (UseCase)
├── infrastructure/ # ارتباط با دنیای بیرون: وصل شدن به API یا دیتابیس محلی
└── presentation/ # لایه نمایش: همون کامپوننتهای React و روتهای Next.js
#Labs_Next5Architecture
https://t.me/labs_gp/73
یکی از بچهها در پیروی از این ساختار گفته بود که دقیقاً نشان بدیم این موضوع توی پروژههای واقعی چگونه چطوریه. یکی از پروژههایی که در حال حاضر روی اون کار میکنم و به زودی به تموم میشه و معرفیش میکنم بهتون از همین ساختار پیروی میکند.
همینطور که میبینین، همه چیز حول و حوش یک پوشه پیش میره
یکی از بچهها در پیروی از این ساختار گفته بود که دقیقاً نشان بدیم این موضوع توی پروژههای واقعی چگونه چطوریه. یکی از پروژههایی که در حال حاضر روی اون کار میکنم و به زودی به تموم میشه و معرفیش میکنم بهتون از همین ساختار پیروی میکند.
همینطور که میبینین، همه چیز حول و حوش یک پوشه پیش میره
🔥1
🚀 سری ۵ قسمتی : معماریهای کلاس جهانی در Next.js 🔴
پارت ۴ — معماری قلمرومحور (Domain-Driven Design - DDD)
وقتی پروژهات یه سیستم پیچیده مالی، فروشگاهی یا حسابداریه، مشکلِ اصلی دیگه کد زدن نیست، مشکل "فهمیدنِ خود بیزینس" و هماهنگی تیمهاست.
تو معماری DDD، ما کدها رو بر اساس دپارتمانهای واقعی یک شرکت میچینیم.
مثلا دپارتمان "فروش" با دپارتمان "انبار" کاملا جدا هستن و تیمهای برنامهنویسیشون هم تو کدهای هم دخالت نمیکنن.
هر قلمرو (Domain) دیتابیس و لاجیک خودش رو داره و فقط از طریق یکسری API مشخص با بقیه قلمروها حرف میزنه.
این یعنی پایان دعوای تیمهای بزرگ!
وقتی بیزینس تبدیل به فولدر میشه :
پارت ۴ — معماری قلمرومحور (Domain-Driven Design - DDD)
وقتی پروژهات یه سیستم پیچیده مالی، فروشگاهی یا حسابداریه، مشکلِ اصلی دیگه کد زدن نیست، مشکل "فهمیدنِ خود بیزینس" و هماهنگی تیمهاست.
تو معماری DDD، ما کدها رو بر اساس دپارتمانهای واقعی یک شرکت میچینیم.
مثلا دپارتمان "فروش" با دپارتمان "انبار" کاملا جدا هستن و تیمهای برنامهنویسیشون هم تو کدهای هم دخالت نمیکنن.
هر قلمرو (Domain) دیتابیس و لاجیک خودش رو داره و فقط از طریق یکسری API مشخص با بقیه قلمروها حرف میزنه.
این یعنی پایان دعوای تیمهای بزرگ!
وقتی بیزینس تبدیل به فولدر میشه :
src/
├── domains/
│ ├── inventory/ # قلمرو انبارداری
│ │ ├── api/
│ │ ├── components/
│ │ └── core/ # لاجیک تخصصی انبار
│ ├── billing/ # قلمرو حسابداری و پرداخت
│ │ ├── api/
│ │ ├── components/
│ │ └── core/ # لاجیک تخصصی مالی
└── shared/ # کدهای مشترک بین همه قلمروها
👍1
این دو دسته از ساختار و معماری رو من خودم به شخصه هنوز تجربه استفاده ازش رو ندارم که در اختیارتون بزارم ولی اگر پروژه اپن سورسی دیدم حتما رفرنس میدم براتون ❤️
🚀 سری ۵ قسمتی: معماریهای کلاس جهانی در Next.js 🟣
پارت ۵ — ساختار Monorepo (Turborepo)
فرض کن رسیدی به جایی که یه پنل مدیریت داری، یه سایت اصلی برای مشتریها، و یه سایت دیگه برای وبلاگ.
هر سه تا هم با Next.js نوشته شدن. اگه بخوای دکمههای سایت رو عوض کنی، باید بری تو هر سه تا پروژه دستی کد رو کپیپیست کنی؟ قطعا نه! کابوس میشه.
اینجا مونوریپو (با ابزارهایی مثل Turborepo یا Nx) میاد وسط. تو این مدل، تمام اپلیکیشنهای تو داخل یک ریپازیتوری (پوشه اصلی) قرار میگیرن. یه پوشه مشترک میسازی برای کامپوننتهای UI یا هوکهای مشترک، و همه اپلیکیشنها از همون یدونه استفاده میکنن. سرعت توسعه و بیلد گرفتن تو این روش فوقالعاده بالاست.
ساختار جذاب یه مونوریپو :
#Labs_Next5Architecture
پارت ۵ — ساختار Monorepo (Turborepo)
فرض کن رسیدی به جایی که یه پنل مدیریت داری، یه سایت اصلی برای مشتریها، و یه سایت دیگه برای وبلاگ.
هر سه تا هم با Next.js نوشته شدن. اگه بخوای دکمههای سایت رو عوض کنی، باید بری تو هر سه تا پروژه دستی کد رو کپیپیست کنی؟ قطعا نه! کابوس میشه.
اینجا مونوریپو (با ابزارهایی مثل Turborepo یا Nx) میاد وسط. تو این مدل، تمام اپلیکیشنهای تو داخل یک ریپازیتوری (پوشه اصلی) قرار میگیرن. یه پوشه مشترک میسازی برای کامپوننتهای UI یا هوکهای مشترک، و همه اپلیکیشنها از همون یدونه استفاده میکنن. سرعت توسعه و بیلد گرفتن تو این روش فوقالعاده بالاست.
ساختار جذاب یه مونوریپو :
my-company-monorepo/
├── apps/ # اپلیکیشنهای اصلی تو
│ ├── web/ # سایت اصلی (Next.js)
│ ├── admin-panel/ # داشبورد مدیریت (Next.js)
│ └── docs/ # سایت داکیومنتها
└── packages/ # پکیجهای مشترکی که خودت ساختی
├── ui-kit/ # دیزاین سیستم مشترک (دکمهها، مودالها)
├── typescript-config/ # تنظیمات مشترک TS
└── eslint-config/ # تنظیمات مشترک لینتر
#Labs_Next5Architecture
مینی سری 5 قسمته معماریهای کلاس جهانی next.jsمون به پایان رسید 💣
مینی سری بعدی چی باشه ؟ شما بگین 🧐❤️
مینی سری بعدی چی باشه ؟ شما بگین 🧐❤️
🔥4❤1
یه واقعیت تلخ هست که 📉
—— بهترین کدهای دنیا اگه درست پرزنت نشن، هیچوقت تبدیل به قرارداد و پول نمیشن 💸 ——
ما برنامهنویسها عادت کردیم همهچیز رو تو ترمینال و ادیتور ببینیم 💻. اما کارفرما (مخصوصا کارفرماهای بینالمللی) کدهای ما رو نمیبینه 👀
اون رزومه، پورتفولیو، نحوه معرفی و خروجیِ کارمون رو میبینه 📄✨.
امروز قراره یه سوییچ بزنیم و از مود کدنویس دربیایم 🔄 و به مود یه بیزینسمن / ارائهدهنده حرفهای در بیایم 🚀🤝
—— بهترین کدهای دنیا اگه درست پرزنت نشن، هیچوقت تبدیل به قرارداد و پول نمیشن 💸 ——
ما برنامهنویسها عادت کردیم همهچیز رو تو ترمینال و ادیتور ببینیم 💻. اما کارفرما (مخصوصا کارفرماهای بینالمللی) کدهای ما رو نمیبینه 👀
اون رزومه، پورتفولیو، نحوه معرفی و خروجیِ کارمون رو میبینه 📄✨.
امروز قراره یه سوییچ بزنیم و از مود کدنویس دربیایم 🔄 و به مود یه بیزینسمن / ارائهدهنده حرفهای در بیایم 🚀🤝
❤2👌1