Web appOpen in Telegram

Postقانون «یک سطح انتزاع در هر تابع» در JavaScript 🧠✨

28 January 2026
|
| کانال توسعه‌دهندگان جاوااسکریپت |
قانون «یک سطح انتزاع در هر تابع» در JavaScript 🧠✨ یکی از نکات طلایی در Clean Code این است که هر تابع فقط با یک سطح انتزاع کار کند. یعنی یا درگیر جزئیات low-level باشد، یا فقط کارهای high-level را صدا بزند؛ نه هر دو را قاطی. این قانون کمک می‌کند: • خوانایی کد بالا برود 👀 • Refactor کردن ساده‌تر شود 🔧 • تست‌نویسی راحت‌تر شود ✅ 🍂 یک مثال از کد شلوغ در Node.js / Express app.post('/api/users', async (req, res) => { const { email, password } = req.body; if (!email || !password) { return res.status(400).json({ message: 'Invalid data' }); } if (!email.includes('@')) { return res.status(400).json({ message: 'Invalid email' }); } const exists = await db.collection('users').findOne({ email }); if (exists) { return res.status(409).json({ message: 'Already exists' }); } const hash = await bcrypt.hash(password, 10); const user = { email, password: hash, createdAt: new Date() }; await db.collection('users').insertOne(user); res.status(201).json({ id: user._id, email: user.email }); }); این تابع هم validation انجام می‌دهد، هم کار دیتابیس، هم جزئیات hash، هم پاسخ HTTP. سطح‌های انتزاع قاطی شده‌اند. 🌱 Refactor با یک سطح انتزاع در هر تابع const validateUserPayload = (body) => { const { email, password } = body; if (!email || !password) return 'Invalid data'; if (!email.includes('@')) return 'Invalid email'; return null; }; const createUser = async ({ email, password }, db, hasher) => { const exists = await db.collection('users').findOne({ email }); if (exists) return { error: 'Already exists' }; const passwordHash = await hasher(password); const user = { email, password: passwordHash, createdAt: new Date() }; const result = await db.collection('users').insertOne(user); return { id: result.insertedId, email: user.email }; }; app.post('/api/users', async (req, res) => { const validationError = validateUserPayload(req.body); if (validationError) { return res.status(400).json({ message: validationError }); } const result = await createUser( req.body, db, (password) => bcrypt.hash(password, 10) ); if (result.error) { return res.status(409).json({ message: result.error }); } res.status(201).json(result); }); حالا: • تابع validateUserPayload فقط validation است ✅ • تابع createUser فقط منطق ساخت کاربر را دارد ✅ • route handler فقط orchestration انجام می‌دهد ✅ این جداسازی باعث می‌شود بعداً راحت‌تر TypeScript اضافه کنید، Unit Test بنویسید، یا منطق ساخت کاربر را در سرویس دیگری (مثلاً در یک worker) استفاده کنید. منابع برای مطالعه بیشتر: • Refactoring.Guru • MDN – Learn JS قدم‌به‌قدم همین الگو را روی قسمت‌های شلوغ پروژه‌های Node.js / React / Next.js خود پیاده کنید؛ هر بار که یک تابع را به یک سطح انتزاع محدود می‌کنید، کدتان قابل‌اعتمادتر و نگه‌داری‌پذیرتر می‌شود 🚀 🔖 #Javascript #JS #جاوااسکریپت #Clean_Code #JavaScript #Node_js #Express #Refactoring #Best_Practices 👤 Developix 💎 Channel: @DevelopixJavascript
9 · 2.3K ·

Nearby in the feed

|| کانال توسعه‌دهندگان جاوااسکریپت |در کد زیر توسعه‌دهنده می‌خواهد یک حلقه از توابع async بسازد که به‌ترتیب و با فاصله زمانی اجرا شوند، اما نتیجه‌ی نهایی آرایه‌ای خالی یا ناقص برمی‌گردد و همه‌ی as|| کانال توسعه‌دهندگان جاوااسکریپت |در کد زیر یک خطای ظریف در استفاده از async/await و Array.prototype.map وجود دارد که باعث می‌شود رفتار برنامه مطابق انتظار نباشد. چه چیزی باید در این کد تغییر کن
this message
|| کانال توسعه‌دهندگان جاوااسکریپت |✨ ساخت یک Todo List ساده با JavaScript خالص (بدون Framework) خیلی وقت‌ها برای تمرین JavaScript و DOM، یک پروژه کوچیک و واقعی مثل Todo List بهترین گزینه‌ست. هم ر|| کانال توسعه‌دهندگان جاوااسکریپت |ویراک کلود | تجربه‌ی ابری بدون محدودیت ☁️🚀 🎁 ۲۰٪ شارژ هدیه روی اولین واریزی مزیت‌هایی که واقعاً فرق می‌سازن: ⚡️ پهنای باند 980 مگ 🌐با IP مازاد ⏱️ راه‌اندازی فور
|| کانال توسعه‌دهندگان جاوااسکریپت || کانال توسعه‌دهندگان جاوااسکریپت |@DevelopixJavascript · channel
3 879subscribers681average post reach
Venue feed Open in Telegram

An open public feed from the search index ChatCrawler — “Google for public Telegram”; refreshed as the venue is crawled. Times are UTC.

Public content only, official Telegram API. About · FAQ · Index limits · Remove a page · Catalog · Search · How we count