یکی از تمیزترین راهها برای مدیریت منطق پیچیده در ربات تلگرام، استفاده از Strategy Pattern است. مخصوصاً وقتی ربات شما چندین دستور مثل
/start، /help، /settings و… دارد، اگر همهچیز را در یک فایل بزرگ بنویسید، بهسرعت تبدیل به Spaghetti Code میشود 🤯با الگوی Strategy میتوانیم منطق هر Command را در یک کلاس جدا نگه داریم و یک Command Dispatcher تمیز داشته باشیم.
ایدهی اصلی Strategy:
- برای هر رفتار (مثلاً هر Command)، یک Strategy جدا تعریف میشود.
- یک کانتکست (اینجا: Message Handler) فقط تصمیم میگیرد کدام Strategy را صدا بزند.
- اضافه کردن Command جدید، بدون تغییر کدهای قبلی انجام میشود (Open/Closed Principle ✅).
نمونه با Python و کتابخانه python-telegram-bot:
from abc import ABC, abstractmethod
# Strategy interface
class CommandStrategy(ABC):
@abstractmethod
def handle(self, update, context):
pass
# Concrete strategies
class StartCommand(CommandStrategy):
def handle(self, update, context):
update.message.reply_text("سلام 👋 خوش اومدی!")
class HelpCommand(CommandStrategy):
def handle(self, update, context):
update.message.reply_text("/start - شروع
/help - راهنما")
class UnknownCommand(CommandStrategy):
def handle(self, update, context):
update.message.reply_text("این دستور رو نمیشناسم 😅")
# Context / Dispatcher
class CommandDispatcher:
def __init__(self):
self._strategies = {
"start": StartCommand(),
"help": HelpCommand(),
}
self._fallback = UnknownCommand()
def dispatch(self, update, context):
cmd = update.message.text.split()[0].replace("/", "")
strategy = self._strategies.get(cmd, self._fallback)
strategy.handle(update, context)
در Handler اصلی فقط کافیه Dispatcher را صدا بزنید و بقیهی منطق از هم جدا و تمیز میماند ✨
مزایا برای ربات تلگرام:
- افزودن Command جدید فقط با ساختن یک کلاس جدید (بدون دستزدن به بقیه کدها).
- تستنویسی راحتتر؛ هر Strategy مستقل تست میشود.
- جداسازی واضح بین لایهی Routing و لایهی Business Logic.
نکتههای عملی 🛠
- نام کلاسها را بر اساس Command شفاف انتخاب کنید (مثل
BanUserCommand، BroadcastCommand).- برای Commandهای پیچیده، آنها را به چند Service کوچکتر بشکنید تا Strategy هم بیش از حد چاق نشود.
- اگر تعداد Commandها زیاد شد، میتوانید Strategyها را در ماژولهای جدا (folders) سازماندهی کنید.
برای مطالعهی بیشتر دربارهی Strategy Pattern:
refactoring.guru/design-patterns/strategy
این الگو مخصوصاً در رباتهایی که بهمرور بزرگ میشوند کمک میکند ساختار کد تمیز، قابلگسترش و قابلنگهداری باقی بماند. از قدمهای کوچک شروع کنید و کمکم Commandهای فعلی را به Strategy تبدیل کنید 🚀
🔖 #TelegramBot #ربات #تلگرام #Strategy_Pattern #Clean_Code #Telegram_Bot #Python #Design_Patterns
👤 Developix
💎 Channel: @DevelopixRobot