Español
Abrir en Telegram

Publicaciónالگوی Strategy: خداحافظ if-elif-elseهای غول‌آسا 🧠

19 de enero de 2026
|
| کانال توسعه‌دهندگان پایتون |
الگوی Strategy: خداحافظ if-elif-elseهای غول‌آسا 🧠 یکی از Code Smellهای رایج در پروژه‌های Python، به‌خصوص در Django / FastAPI، زنجیره‌های بزرگ if / elif برای انتخاب نوع رفتار است. این ساختارها هم سخت تست می‌شوند، هم هر تغییر کوچکی را پرریسک می‌کنند. یک راه‌حل تمیز و شناخته‌شده در Design Patternها برای این مشکل، الگوی Strategy است. این الگو منطق‌های قابل‌جایگزین (قابل تعویض) را در آبجکت‌های جدا نگه می‌دارد و کد را قابل‌گسترش و خواناتر می‌کند. 🙌 مثال ساده: فرض کنید در یک سرویس پرداخت، بسته به نوع روش پرداخت، منطق متفاوتی دارید: class PaymentService: def pay(self, method: str, amount: int) -> None: if method == "card": print("Paying by card", amount) elif method == "paypal": print("Paying by PayPal", amount) elif method == "crypto": print("Paying by crypto", amount) else: raise ValueError("Unsupported method") این کلاس هم تک‌مسئولیتی نیست، هم هر بار روش جدیدی اضافه می‌شود باید کلاس را ادیت کنیم. زیر پا گذاشتن اصل Open/Closed. با Strategy همین منطق را تمیز می‌کنیم: from abc import ABC, abstractmethod class PaymentStrategy(ABC): @abstractmethod def pay(self, amount: int) -> None: ... class CardPayment(PaymentStrategy): def pay(self, amount: int) -> None: print("Paying by card", amount) class PaypalPayment(PaymentStrategy): def pay(self, amount: int) -> None: print("Paying by PayPal", amount) class CryptoPayment(PaymentStrategy): def pay(self, amount: int) -> None: print("Paying by crypto", amount) class PaymentService: def __init__(self, strategy: PaymentStrategy) -> None: self._strategy = strategy def pay(self, amount: int) -> None: self._strategy.pay(amount) حالا انتخاب Strategy می‌تواند در لایه‌ی وب (مثلاً FastAPI endpoint) انجام شود و PaymentService تمیز و قابل‌تست می‌ماند: def get_strategy(method: str) -> PaymentStrategy: mapping = { "card": CardPayment(), "paypal": PaypalPayment(), "crypto": CryptoPayment(), } try: return mapping[method] except KeyError: raise ValueError("Unsupported method") نکته عملی قابل‌استفاده امروز ✅ هرجا یک تابع یا view دارید که براساس یک نوع (type / method / status) با if-elifهای زیاد شاخه‌بندی می‌کند، آن منطق را به کلاس‌های کوچک‌تر Strategy تبدیل کنید و یک mapping تمیز بسازید. این کار هم خوانایی را بالا می‌برد، هم اضافه‌کردن رفتار جدید را بدون دست‌زدن به منطق قدیمی ممکن می‌کند. برای مطالعه‌ی عمیق‌تر درباره Strategy: refactoring.guru/design-patterns/strategy کد تمیز با الگوهای درست، در پروژه‌های واقعی Python تفاوت جدی در سرعت توسعه و لذت کار ایجاد می‌کند. 🚀 امروز یکی از if-elifهای سنگین پروژه‌تان را به یک Strategy تمیز تبدیل کنید و نتیجه را در نگه‌داری و تست‌ها ببینید. 🔖 #Python #پایتون #python #strategy_pattern #clean_code #design_patterns #architecture #refactoring 👤 Developix 💎 Channel: @DevelopixPython
20 · 2.6K ·

Cerca en el feed

|| کانال توسعه‌دهندگان پایتون |⭕️ ویراک کلود زیرساختی مطمئن برای کسب و کارهای آنلاین 🎁 20% شارژ بیشتر روی اولین واریزی ⚡️با کد معرف: 10% شارژ برای شما و 10% برای دوستتان! 🔘با IPv6 رایگان 🔘با || کانال توسعه‌دهندگان پایتون |📌 باز و بسته کردن فایل با context manager خیلی وقت cها توی کدهای Python دیده می cشه فایل رو با open() باز می cکنیم، ولی فراموش می cکنیم ببندیمش. این کار می cتون
este mensaje
|| کانال توسعه‌دهندگان پایتون |در نمونه‌کد بالا تابع load_rows اول همه‌ی داده‌ها را یک‌جا در مموری می‌ریزد و بعد روی آن‌ها loop می‌زند؛ این کار روی فایل‌های بزرگ باعث Memory مصرفی بالا و حتی || کانال توسعه‌دهندگان پایتون |👨‍💻 سوال برای توسعه‌دهندگان Python خروجی اجرای کد زیر در Python چیست؟ به تفاوت بین متغیرهای سازنده (constructor) و متغیرهای کلاس و همین‌طور نحوهٔ ذخیره شدن defa
|| کانال توسعه‌دهندگان پایتون || کانال توسعه‌دهندگان پایتون |@DevelopixPython · canal · Tecnología
7 646suscriptores704alcance medio por publicación
Feed de la comunidad Abrir en Telegram

Un feed público abierto del índice de búsqueda ChatCrawler — el “Google del Telegram público”; se actualiza a medida que se rastrea la comunidad. Las horas se muestran en UTC.

Solo contenido público, API oficial de Telegram. Acerca de · Preguntas frecuentes · Límites del índice · Eliminar una página · Catálogo · Búsqueda · Cómo contamos