برنامه نویسی

قدرت دکوراتورها: جداسازی نگرانی ها (SOC) در کد پایتون

دکوراتورها یک ویژگی مفید در پایتون هستند که امکان جداسازی نگرانی ها در کد را فراهم می کند. این به معنای کپسوله کردن عملکردهای مشابه در یک مکان واحد و کاهش تکرار کد است. با پیاده سازی عملکرد مشترک در یک دکوراتور، می توانیم قابلیت نگهداری و مقیاس پذیری کد خود را بهبود بخشیم.

یک مورد رایج برای دکوراتورها در چارچوب های وب مانند جنگو، فلاسک و FastAPI است. بیایید قدرت دکوراتورها را با استفاده از آنها به عنوان یک میان افزار برای ورود به پایتون درک کنیم. در یک محیط تولید، دانستن زمان لازم برای ارائه یک درخواست مهم است. این اطلاعات در تمام نقاط پایانی به اشتراک گذاشته می شود، بنابراین منطقی است که آن را در یک مکان با استفاده از دکوراتورها پیاده سازی کنید.

فرض کنید تابعی به نام “service_request()” داریم که مسئول رسیدگی به درخواست های کاربر است. ما می خواهیم زمان لازم برای اجرای این تابع را ثبت کنیم. یکی از راه های انجام این کار اضافه کردن عبارات ورود به سیستم در خود تابع است، مانند این:

import time

def service_request():
    start_time = time.time()
    # Function body representing complex computation
    print(f"Time Taken: {time.time() - start_time}s")
    return True
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

در حالی که این روش کار می کند، منجر به تکرار کد می شود. اگر مسیرها یا عملکردهای بیشتری داشته باشیم، باید کد ورود به سیستم را در هر کدام تکرار کنیم. این در تضاد با اصل DRY (خودت را تکرار نکن) کد تمیز است. برای جلوگیری از این امر، می‌توانیم از دکوراتورها برای کپسوله کردن عملکرد ورود به سیستم استفاده کنیم.

میان افزار لاگ کردن چیزی شبیه به این خواهد بود:

def request_logger(func):
    def wrapper(*args, **kwargs):
            start_time = time.time()
            res = func()
            print(f"Time Taken: {time.time() - start_time}s")
            return res
    return wrapper
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

در این پیاده سازی، تابع خارجی “request_logger” تزئین کننده ای است که یک تابع را به عنوان ورودی می پذیرد. تابع داخلی “wrapper” عملکرد ورود به سیستم را پیاده سازی می کند و تابع اصلی “func” درون آن فراخوانی می شود. به این ترتیب، می‌توانیم بدون تغییر کد تابع اصلی، از عملکرد ورود به سیستم استفاده کنیم.

برای استفاده از این دکوراتور، به سادگی تابع service_request را با استفاده از علامت @ تزئین می کنیم:

@request_logger
def service_request():
    # Function body representing complex computation
    return True
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

این به طور خودکار تابع service_request را به دکوراتور “request_logger” منتقل می کند، که زمان صرف شده را ثبت می کند و سپس تابع اصلی را فراخوانی می کند. این به ما این امکان را می دهد که به راحتی بدون تکرار کد، ورود به سیستم را به روش های مشابه به سایر روش های خدمات اضافه کنیم. مثلا:

@request_logger
def service_request():
    # Function body representing complex computation
    return True

@request_logger
def service_another_request():
    # Function body
    return True
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

به طور خلاصه، دکوراتورها به ما کمک می‌کنند تا عملکردهای مشترک را در یک مکان واحد محصور کنیم و کد ما را قابل نگهداری و مقیاس‌پذیرتر کنند. آنها همچنین از اصل جداسازی نگرانی‌ها پیروی می‌کنند و به ما اجازه می‌دهند تا عملکردی را بدون تغییر کد اصلی اضافه کنیم. دکوراتورها ابزار قدرتمندی در پایتون هستند و به شدت در چارچوب های وب و سایر برنامه ها استفاده می شوند.

برنامه های مطالعه MyExamCloud
آزمون های تمرینی گواهینامه های جاوا – برنامه های مطالعه MyExamCloud
تست های تمرینی گواهینامه های پایتون – برنامه های مطالعه MyExamCloud
تست های تمرین گواهینامه AWS – برنامه های مطالعه MyExamCloud
تست‌های تمرین گواهینامه Google Cloud – برنامه‌های مطالعه MyExamCloud
طرح مطالعه آزمون های تمرین استعداد MyExamCloud
MyExamCloud AI Exam Generator

نوشته های مشابه

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

دکمه بازگشت به بالا