اصطلاحات معماری و اصول طراحی نرمافزار
🔹 ۱. Separation of Concerns (SoC)
تعریف: هر ماژول/کلاس/کامپوننت باید فقط روی یک «موضوع» تمرکز کنه و مسئولیتهای مختلف قاطی نشن.
مثال در React/Next.js:
- بد: کامپوننت هم UI رندر کنه، هم API کال بزنه، هم validation انجام بده.
- خوب:
- Service برای API
- Hook برای منطق (useAuth, useFetch…)
- Component فقط UI
🔹 ۲. Single Responsibility Principle (SRP)
(یکی از ۵ اصل SOLID)
تعریف: هر ماژول یا کلاس باید تنها یک دلیل برای تغییر داشته باشه.
مثال:
- یک
AuthServiceفقط مسئول login/logout باشه، نه ارسال ایمیل یا مدیریت نوتیفیکیشن.
🔹 ۳. DRY (Don’t Repeat Yourself)
تعریف: کد تکراری ننویس. به جای کپیپیست، abstraction بساز.
مثال:
- بد: هر کامپوننت خودش دستی API call بزنه و خطای 401 رو هندل کنه.
- خوب: یه http client مشترک داشته باشی که همه جا استفاده بشه.
🔹 ۴. KISS (Keep It Simple, Stupid)
تعریف: ساده نگه داشتن کد همیشه بهتر از پیچیده کردن غیرضروریه.
مثال:
- برای state کوچک به جای Redux، از useState یا Context استفاده کن.
- توی بکاند، به جای over-engineering با microservice، یه ماژول ساده Monolith کفایت میکنه.
🔹 ۵. YAGNI (You Ain’t Gonna Need It)
تعریف: چیزی رو که الان نیاز نداری، پیادهسازی نکن.
مثال:
- هنوز پروژهت یک جدول داره، لازم نیست Elasticsearch اضافه کنی.
🔹 ۶. Dependency Injection (DI)
یک تکنیک پیادهسازی برای تحقق DIP و مدیریت وابستگیها
تعریف: وابستگیها رو به جای اینکه توی کلاس بسازی، از بیرون تزریق کن.
مثال در React:
- به جای اینکه کامپوننت خودش axios بسازه → axios instance (http client) رو بهش بدی.
🔹 ۷. Inversion of Control (IoC)
تعریف: به جای اینکه کلاسها/ماژولها خودشون همهچیز رو کنترل کنن، کنترل رو بده به framework/container.
مثال:
- در Next.js تو مسیر
app/فقط فایل میسازی، Routing رو خودش مدیریت میکنه. این یعنی IoC.
🔹 ۸. SOLID Principles (خیلی تو مصاحبهها میپرسن)
پنج اصل طراحی شیگرا که توی معماری تمیز هم مهمه:
- Single Responsibility Principle (SRP) → یک مسئولیت واحد
- Open/Closed Principle → کدت باید برای گسترش باز باشه ولی برای تغییر بسته
- Liskov Substitution → زیرکلاس باید بتونه جایگزین کلاس پدر بشه بدون اینکه رفتار اشتباه کنه
- Interface Segregation → به جای یک interface بزرگ، چند تا interface کوچک داشته باش
- Dependency Inversion → وابستگی به abstraction، نه به implementation
🔹 ۹. Clean Architecture (Onion Architecture)
تعریف: لایهها رو جدا کن:
- Domain (Business Logic)
- Application (Use Cases)
- Infrastructure (DB, API)
- Presentation (UI/React)
مثال:
تو Next.js →
- services/ → لایه دسترسی به API
- hooks/ → useCases (مثل useLogin, useFetchStats)
- components/ → UI
🔹 ۱۰. CQRS (Command Query Responsibility Segregation)
تعریف: جدا کردن عملیات Query (خواندن دیتا) از Command (تغییر دیتا).
مثال:
getUser(id)فقط دیتا میاره → بدون Side EffectupdateUser(payload)دیتا رو تغییر میده