Skip to content

Files

Latest commit

caf398a · Mar 11, 2025

History

History
129 lines (102 loc) · 13.4 KB

README_FA.md

File metadata and controls

129 lines (102 loc) · 13.4 KB

🐦‍🔥 الگوهای طراحی در TypeScript - اصول و قواعد

نوشته شده توسط علی مرادی AliDeWeb

اصول برنامه‌نویسی شیءگرا (OOP):

  1. Encapsulation (کپسوله‌سازی) – بسته‌بندی داده‌ها و متدها در یک کلاس و محدود کردن دسترسی مستقیم به برخی جزئیات.
  2. Abstraction (تجرید) – پنهان‌سازی جزئیات پیچیده پیاده‌سازی و نمایش تنها قابلیت‌های ضروری.
  3. Inheritance (وراثت) – امکان وراثت ویژگی‌ها و رفتارهای یک کلاس از کلاس دیگر برای ترویج استفاده مجدد از کد.
  4. Polymorphism (چندریختی) – فعال‌سازی رفتار چندگانه کلاس‌ها به عنوان نمونه‌هایی از یک ابرکلاس مشترک، امکان بازنویسی متدها و رفتار پویا.

اصول SOLID:

  1. Single Responsibility Principle (SRP) - اصل مسئولیت واحد – یک کلاس باید فقط یک دلیل برای تغییر داشته باشد، به این معنی که باید فقط یک مسئولیت داشته باشد.
  2. Open/Closed Principle (OCP) - اصل باز/بسته – موجودیت‌های نرم‌افزاری باید برای توسعه باز باشند، اما برای تغییر بسته.
  3. Liskov Substitution Principle (LSP) - اصل جانشینی لیسکوف – زیرگونه‌ها باید بتوانند به جای گونه‌های پایه خود جایگزین شوند، بدون اینکه صحت برنامه را تغییر دهند.
  4. Interface Segregation Principle (ISP) - اصل تفکیک رابط – کلاینت‌ها نباید مجبور به وابستگی به رابط‌هایی شوند که از آن‌ها استفاده نمی‌کنند.
  5. Dependency Inversion Principle (DIP) - اصل وارونگی وابستگی – ماژول‌های سطح بالا نباید به ماژول‌های سطح پایین وابسته باشند؛ هر دو باید به تجریدها وابسته باشند.

سایر اصول مهم:

علاوه بر SOLID، اصول طراحی کلیدی دیگر در OOP عبارتند از:

  • DRY (Don’t Repeat Yourself) - تکرار نکنید – از تکرار اجتناب کنید و کد قابل استفاده مجدد را تجرید کنید.
  • KISS (Keep It Simple, Stupid) - ساده نگه‌دار، احمق! – کد را ساده نگه دارید و از پیچیدگی غیرضروری اجتناب کنید.
  • YAGNI (You Ain’t Gonna Need It) - بهش نیاز پیدا نخواهی کرد – ویژگی‌ها را مگر در صورت نیاز مطلق، پیاده‌سازی نکنید.
  • Law of Demeter (LoD) - قانون دمتر – اشیاء باید فقط با اشیاء نزدیک مرتبط تعامل داشته باشند تا وابستگی را کاهش دهند.

این اصول از قابلیت نگهداری، مقیاس‌پذیری و کد تمیز اطمینان می‌دهند.

📂 انواع الگوهای طراحی

الگوهای طراحی به سه دسته اصلی تقسیم می‌شوند:

1. الگوهای رفتاری (Behavioral Patterns)

این الگوها بر ارتباط بین اشیاء و نحوه تعامل آن‌ها با یکدیگر تمرکز دارند.

  • Observer (ناظر) – وابستگی یک به چند بین اشیاء را تعریف می‌کند، به طوری که وقتی یک شیء تغییر وضعیت می‌دهد، تمام وابسته‌های آن مطلع می‌شوند.
  • Strategy (راهبرد) – به یک شیء اجازه می‌دهد تا رفتار خود را به صورت پویا با تغییر بین الگوریتم‌های مختلف تغییر دهد.
  • Command (فرمان) – یک درخواست را به عنوان یک شیء کپسوله می‌کند، و امکان پارامتری‌سازی کلاینت‌ها، صف‌بندی درخواست‌ها و ثبت عملیات را فراهم می‌کند.

2. الگوهای ساختاری (Structural Patterns)

این الگوها به ترکیب کلاس‌ها و اشیاء برای شکل‌دهی ساختارهای بزرگتر در عین انعطاف‌پذیری و کارآمدی آن‌ها می‌پردازند.

  • Adapter (مبدل) – شکاف بین رابط‌های ناسازگار را پر می‌کند.
  • Decorator (تزئین‌کننده) – به صورت پویا عملکرد یک شیء را بدون تغییر کد آن گسترش می‌دهد.
  • Facade (نما) – یک رابط ساده‌شده برای یک زیرسیستم پیچیده ارائه می‌دهد.

3. الگوهای سازنده (Creational Patterns)

این الگوها بر مکانیزم‌های ایجاد شیء برای افزایش انعطاف‌پذیری و استفاده مجدد تمرکز دارند.

  • Factory Method (متد کارخانه) – یک رابط برای ایجاد اشیاء فراهم می‌کند اما به زیرکلاس‌ها اجازه می‌دهد نوع اشیاء ایجاد شده را تغییر دهند.
  • Singleton (تک‌نسخه) – تضمین می‌کند که یک کلاس فقط یک نمونه داشته باشد و یک نقطه دسترسی سراسری به آن فراهم می‌کند.
  • Builder (سازنده) – امکان ایجاد گام‌به‌گام اشیاء پیچیده را فراهم می‌کند، و خوانایی و قابلیت نگهداری را بهبود می‌بخشد.

📂 الگوها

الگوی طراحی مستندات
Memento (یادگار) 📜 README
State (حالت) 📜 README
Iterator (تکرارگر) 📜 README
Strategy (راهبرد) 📜 README
Template Method (متد قالب) 📜 README
Command (فرمان) 📜 README
Observer (ناظر) 📜 README
Mediator (میانجی) 📜 README
Chain Of Responsibility (زنجیره مسئولیت) 📜 README
Visitor (بازدیدکننده) 📜 README
Prototype (نمونه اولیه) 📜 README
Singleton (تک‌نسخه) 📜 README
Factory Method (متد کارخانه) 📜 README
Abstract Factory (کارخانه انتزاعی) 📜 README
Builder (سازنده) 📜 README
Composite (ترکیبی) 📜 README
Adaptor (مبدل) 📜 README
Decorator (تزئین‌کننده) 📜 README
Facade (نما) 📜 README
Fly Weight (مگس‌وزن) 📜 README
Bridge (پل) 📜 README
Proxy (نماینده) 📜 README

مرور سریع الگوهای طراحی

  • Memento (یادگار): ذخیره و بازیابی حالت داخلی یک شیء بدون نقض کپسوله‌سازی.

  • State (حالت): به یک شیء اجازه می‌دهد وقتی حالت داخلی آن تغییر می‌کند، رفتارش را تغییر دهد.

  • Iterator (تکرارگر): دسترسی ترتیبی به عناصر یک شیء مجموعه بدون افشای پیاده‌سازی داخلی آن.

  • Strategy (راهبرد): تعریف خانواده‌ای از الگوریتم‌ها و کپسوله‌سازی هر یک، و امکان تعویض الگوریتم‌ها در زمان اجرا.

  • Template Method (متد قالب): تعریف قالب الگوریتم در یک متد و اجازه به زیرکلاس‌ها برای ارائه پیاده‌سازی‌های خاص برای مراحل مشخص.

  • Command (فرمان): درخواست‌ها را به عنوان اشیاء کپسوله می‌کند، و امکان پارامتری‌سازی، صف‌بندی و ثبت درخواست‌ها را فراهم می‌سازد.

  • Observer (ناظر): ایجاد یک مکانیزم اعلان‌رسانی یک به چند بین اشیاء، به طوری که تغییر وضعیت یک شیء باعث اطلاع‌رسانی خودکار به وابسته‌ها شود.

  • Mediator (میانجی): تعریف شیئی برای کپسوله‌سازی نحوه تعامل مجموعه‌ای از اشیاء، کاهش وابستگی مستقیم بین آن‌ها.

  • Chain Of Responsibility (زنجیره مسئولیت): اجتناب از گره زدن فرستنده یک درخواست به گیرنده آن، و اجازه دادن به چندین شیء برای رسیدگی به درخواست.

  • Visitor (بازدیدکننده): جدا کردن الگوریتم از ساختار شیئی که روی آن عمل می‌کند، افزودن عملیات جدید به ساختار شیء بدون تغییر کلاس‌ها.

  • Prototype (نمونه اولیه): ایجاد اشیاء جدید با کپی کردن یک نمونه اولیه موجود.

  • Singleton (تک‌نسخه): اطمینان از اینکه یک کلاس فقط یک نمونه دارد و یک نقطه دسترسی سراسری به آن فراهم می‌کند.

  • Factory Method (متد کارخانه): تعریف یک رابط برای ایجاد اشیاء، اما واگذاری تصمیم‌گیری در مورد نوع شیء ایجاد شده به زیرکلاس‌ها.

  • Abstract Factory (کارخانه انتزاعی): فراهم کردن یک رابط برای ایجاد خانواده‌ای از اشیاء مرتبط بدون مشخص کردن کلاس‌های مشخص آن‌ها.

  • Builder (سازنده): جدا کردن ساخت شیء پیچیده از نمایش آن، امکان ساختن نمایش‌های مختلف از یک شیء.

  • Composite (ترکیبی): ترکیب اشیاء به ساختارهای درختی برای نمایش سلسله مراتب جزء-کل.

  • Adaptor (مبدل): تبدیل رابط یک کلاس به رابطی که کلاینت‌ها انتظار دارند، امکان همکاری کلاس‌هایی با رابط‌های ناسازگار.

  • Decorator (تزئین‌کننده): اضافه کردن مسئولیت‌های جدید به یک شیء به صورت پویا.

  • Facade (نما): فراهم کردن یک رابط یکپارچه برای یک مجموعه از رابط‌ها در یک زیرسیستم.

  • Fly Weight (مگس‌وزن): استفاده از اشتراک‌گذاری برای پشتیبانی کارآمد از تعداد زیادی شیء کوچک.

  • Bridge (پل): جدا کردن انتزاع از پیاده‌سازی، امکان تغییر مستقل آن‌ها.

  • Proxy (نماینده): فراهم کردن یک جانشین یا نماینده برای کنترل دسترسی به یک شیء دیگر.