۱۴۰۴/۰۷/۲۵ Nebular

اصطلاحات معماری و اصول طراحی نرم‌افزار

🔹 ۱. 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 (خیلی تو مصاحبه‌ها می‌پرسن)

پنج اصل طراحی شی‌گرا که توی معماری تمیز هم مهمه:

  1. Single Responsibility Principle (SRP) → یک مسئولیت واحد
  2. Open/Closed Principle → کدت باید برای گسترش باز باشه ولی برای تغییر بسته
  3. Liskov Substitution → زیرکلاس باید بتونه جایگزین کلاس پدر بشه بدون اینکه رفتار اشتباه کنه
  4. Interface Segregation → به جای یک interface بزرگ، چند تا interface کوچک داشته باش
  5. 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 Effect
  • updateUser(payload) دیتا رو تغییر می‌ده
Accept Cookies
Accept Cookies
[your-shortcode]