توقف استفاده از زنجیره های طولانی if-else: از الگوی فرمان در پایتون استفاده کنید

Summarize this content to 400 words in Persian Lang
آیا تا به حال خود را با طولانی پیدا کرده اید if-else یا بلوک سوئیچ مورد در کد شما؟ هنگامی که با ورودی های کاربر، دستورات یا منطق مبتنی بر رویداد سروکار داریم، این کاملاً رایج است. اما با گذشت زمان، این زنجیرهها میتوانند خارج از کنترل رشد کرده و به کابوس نگهداری شوند.
الگوی فرمان را وارد کنید.
Command Pattern یک الگوی طراحی رفتاری است که درخواست ها را به اشیا تبدیل می کند و به شما این امکان را می دهد که روش ها را با اعمال پارامتری کنید، اجرا را به تاخیر بیندازید و صف هایی از عملیات ایجاد کنید. به خصوص زمانی مفید است که کد شما دارای عبارات شرطی زیادی باشد.
بیایید وارد آن شویم و ببینیم چگونه میتوانید کد خود را اصلاح کنید تا پاکتر، قابل نگهداریتر و گسترش آن آسانتر باشد.
بلوک سنتی if-else
تصور کنید برنامه ای دارید که عملیات مختلفی مانند باز کردن، ذخیره یا چاپ یک سند را بر اساس ورودی کاربر انجام می دهد. ممکن است وسوسه شوید که چیزی شبیه به این بنویسید:
def handle_command(command):
if command == “open”:
open_document()
elif command == “save”:
save_document()
elif command == “print”:
print_document()
else:
raise ValueError(“Unknown command”)
def open_document():
print(“Document opened”)
def save_document():
print(“Document saved”)
def print_document():
print(“Document printed”)
وارد حالت تمام صفحه شوید
از حالت تمام صفحه خارج شوید
این به خوبی کار می کند، اما با اضافه شدن دستورات بیشتر، بلوک if-else رشد می کند و کد شما را خواناتر و نگهداری آن سخت تر می کند.
Refactoring با الگوی فرمانبا الگوی فرمان، ما هر عملیات (یا فرمان) را در کلاس خودش کپسوله می کنیم و طراحی تمیزتر و انعطاف پذیرتری ارائه می دهیم.
مرحله 1: یک رابط فرمان تعریف کنید
ما با تعریف یک رابط دستوری ساده (یا کلاس پایه در پایتون) شروع می کنیم:
from abc import ABC, abstractmethod
class Command(ABC):
@abstractmethod
def execute(self):
pass
وارد حالت تمام صفحه شوید
از حالت تمام صفحه خارج شوید
هر فرمان اجرا خواهد شد execute() روشی که حاوی منطق عملیات است.
مرحله 2: اجرای دستورات بتن
اکنون، برای هر عملیات، کلاسهای فرمان مشخصی ایجاد میکنیم. هر فرمان اجرا خواهد شد execute() روشی برای انجام وظیفه خاص خود
class OpenCommand(Command):
def execute(self):
print(“Document opened”)
class SaveCommand(Command):
def execute(self):
print(“Document saved”)
class PrintCommand(Command):
def execute(self):
print(“Document printed”)
وارد حالت تمام صفحه شوید
از حالت تمام صفحه خارج شوید
مرحله 3: یک فراخوان فرمان ایجاد کنید
بعد، ما به چیزی نیاز داریم تا این دستورات را بر اساس ورودی کاربر فراخوانی کنیم. به جای طولانی if-else ما می توانیم از یک دیکشنری برای نگاشت دستورات به کلاس های مربوطه استفاده کنیم.
class CommandInvoker:
def __init__(self):
self.commands = {
“open”: OpenCommand(),
“save”: SaveCommand(),
“print”: PrintCommand(),
}
def handle_command(self, command):
if command in self.commands:
self.commands[command].execute()
else:
raise ValueError(“Unknown command”)
وارد حالت تمام صفحه شوید
از حالت تمام صفحه خارج شوید
حالا، ما CommandInvoker کلاس به عنوان یک مکان متمرکز برای کنترل دستورات عمل می کند.
مرحله 4: استفاده
بیایید ببینیم این در عمل چگونه کار می کند:
if __name__ == “__main__”:
invoker = CommandInvoker()
invoker.handle_command(“open”)
invoker.handle_command(“save”)
invoker.handle_command(“print”)
وارد حالت تمام صفحه شوید
از حالت تمام صفحه خارج شوید
چرا این بهتر است
مقیاس پذیری: افزودن دستورات جدید به سادگی افزودن یک کلاس جدید و به روز رسانی آن است commands فرهنگ لغت.
جداسازی نگرانی ها: هر دستور مسئول رفتار خود است و کد را ماژولارتر و درک آن آسان تر می کند.
انعطاف پذیری: دستورات را می توان در صف قرار داد، به تأخیر انداخت و یا به صورت مشروط بدون تغییر منطق اصلی اجرا شد.
نتیجه گیری
Command Pattern ابزار قدرتمندی است که می تواند به شما در حذف زنجیره های پیچیده if-else و ایجاد یک پایگاه کد سازمان یافته تر و قابل نگهداری کمک کند. این به ویژه در سناریوهایی که عملیات یا اقدامات زیادی بر اساس ورودی کاربر دارید مفید است.
بنابراین دفعه بعد که متوجه شدید در حال نوشتن یک بلوک شرطی غولپیکر هستید، کد خود را با الگوی فرمان مجدداً تغییر دهید!
کد نویسی مبارک!
آیا تا به حال خود را با طولانی پیدا کرده اید if-else
یا بلوک سوئیچ مورد در کد شما؟ هنگامی که با ورودی های کاربر، دستورات یا منطق مبتنی بر رویداد سروکار داریم، این کاملاً رایج است. اما با گذشت زمان، این زنجیرهها میتوانند خارج از کنترل رشد کرده و به کابوس نگهداری شوند.
الگوی فرمان را وارد کنید.
Command Pattern یک الگوی طراحی رفتاری است که درخواست ها را به اشیا تبدیل می کند و به شما این امکان را می دهد که روش ها را با اعمال پارامتری کنید، اجرا را به تاخیر بیندازید و صف هایی از عملیات ایجاد کنید. به خصوص زمانی مفید است که کد شما دارای عبارات شرطی زیادی باشد.
بیایید وارد آن شویم و ببینیم چگونه میتوانید کد خود را اصلاح کنید تا پاکتر، قابل نگهداریتر و گسترش آن آسانتر باشد.
بلوک سنتی if-else
تصور کنید برنامه ای دارید که عملیات مختلفی مانند باز کردن، ذخیره یا چاپ یک سند را بر اساس ورودی کاربر انجام می دهد. ممکن است وسوسه شوید که چیزی شبیه به این بنویسید:
def handle_command(command):
if command == "open":
open_document()
elif command == "save":
save_document()
elif command == "print":
print_document()
else:
raise ValueError("Unknown command")
def open_document():
print("Document opened")
def save_document():
print("Document saved")
def print_document():
print("Document printed")
این به خوبی کار می کند، اما با اضافه شدن دستورات بیشتر، بلوک if-else رشد می کند و کد شما را خواناتر و نگهداری آن سخت تر می کند.
Refactoring با الگوی فرمان
با الگوی فرمان، ما هر عملیات (یا فرمان) را در کلاس خودش کپسوله می کنیم و طراحی تمیزتر و انعطاف پذیرتری ارائه می دهیم.
مرحله 1: یک رابط فرمان تعریف کنید
ما با تعریف یک رابط دستوری ساده (یا کلاس پایه در پایتون) شروع می کنیم:
from abc import ABC, abstractmethod
class Command(ABC):
@abstractmethod
def execute(self):
pass
هر فرمان اجرا خواهد شد execute()
روشی که حاوی منطق عملیات است.
مرحله 2: اجرای دستورات بتن
اکنون، برای هر عملیات، کلاسهای فرمان مشخصی ایجاد میکنیم. هر فرمان اجرا خواهد شد execute()
روشی برای انجام وظیفه خاص خود
class OpenCommand(Command):
def execute(self):
print("Document opened")
class SaveCommand(Command):
def execute(self):
print("Document saved")
class PrintCommand(Command):
def execute(self):
print("Document printed")
مرحله 3: یک فراخوان فرمان ایجاد کنید
بعد، ما به چیزی نیاز داریم تا این دستورات را بر اساس ورودی کاربر فراخوانی کنیم. به جای طولانی if-else
ما می توانیم از یک دیکشنری برای نگاشت دستورات به کلاس های مربوطه استفاده کنیم.
class CommandInvoker:
def __init__(self):
self.commands = {
"open": OpenCommand(),
"save": SaveCommand(),
"print": PrintCommand(),
}
def handle_command(self, command):
if command in self.commands:
self.commands[command].execute()
else:
raise ValueError("Unknown command")
حالا، ما CommandInvoker
کلاس به عنوان یک مکان متمرکز برای کنترل دستورات عمل می کند.
مرحله 4: استفاده
بیایید ببینیم این در عمل چگونه کار می کند:
if __name__ == "__main__":
invoker = CommandInvoker()
invoker.handle_command("open")
invoker.handle_command("save")
invoker.handle_command("print")
چرا این بهتر است
-
مقیاس پذیری: افزودن دستورات جدید به سادگی افزودن یک کلاس جدید و به روز رسانی آن است
commands
فرهنگ لغت. -
جداسازی نگرانی ها: هر دستور مسئول رفتار خود است و کد را ماژولارتر و درک آن آسان تر می کند.
-
انعطاف پذیری: دستورات را می توان در صف قرار داد، به تأخیر انداخت و یا به صورت مشروط بدون تغییر منطق اصلی اجرا شد.
نتیجه گیری
Command Pattern ابزار قدرتمندی است که می تواند به شما در حذف زنجیره های پیچیده if-else و ایجاد یک پایگاه کد سازمان یافته تر و قابل نگهداری کمک کند. این به ویژه در سناریوهایی که عملیات یا اقدامات زیادی بر اساس ورودی کاربر دارید مفید است.
بنابراین دفعه بعد که متوجه شدید در حال نوشتن یک بلوک شرطی غولپیکر هستید، کد خود را با الگوی فرمان مجدداً تغییر دهید!
کد نویسی مبارک!