برنامه نویسی

الگوهای طراحی در PHP 8: Builder

سلام!
در حوزه توسعه نرم افزار، ایجاد اشیاء پیچیده اغلب شبیه تلاش برای حل یک مکعب روبیک است. این یک فرآیند گام به گام است که در آن هر حرکت بسیار مهم است و بر نتیجه نهایی تأثیر می گذارد. اما اگر ما یک راهنما، طرحی داشتیم که می توانست به ما کمک کند این معما را بدون زحمت حل کنیم، چه می شد؟ در دنیای برنامه نویسی، الگوی سازنده به عنوان این راهنما عمل می کند.

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

در این مقاله، ما سفری را برای کشف الگوی Builder آغاز می‌کنیم و قابلیت‌های آن را با PHP 8 آشکار می‌کنیم. ساختار آن را بررسی می‌کنیم، تفاوت‌های ظریف آن را درک می‌کنیم و آن را در عمل با نمونه‌های دنیای واقعی مشاهده می‌کنیم. چه در حال ساختن یک پلتفرم پیچیده تجارت الکترونیکی یا یک وبلاگ ساده باشید، الگوی سازنده می تواند سلاح مخفی شما برای مدیریت ایجاد اشیاء پیچیده با سهولت و ظرافت باشد.

تصور کنید در حال ساخت یک اپلیکیشن تجارت الکترونیک هستید که در آن یک کلاس محصول دارید. کلاس Product دارای جزئیات زیادی مانند شناسه، نام، قیمت، توضیحات، سازنده، موجودی، تخفیف و غیره است.

ایجاد یک شیء Product یک فرآیند چند مرحله ای و متوالی است. اگر برای هر ویژگی چندین سازنده ایجاد کنیم، به تعداد زیادی پارامتر سازنده منجر می شود. این به عنوان ضد الگوی سازنده تلسکوپی شناخته می شود.

class Product
{
    public int $id;
    public string $name;
    public int $price;
    public string $description;
    public string $manufacturer;
    public string $inventory;
    public int $discount;

    public function __construct(
      int $id,
      string $name,
      int $price,
      string $description,
      string $manufacturer,
      string $inventory,
      int $discount
    )
    {
        $this->id = $id;
        $this->name = $name;
        $this->price = $price;
        $this->description = $description;
        $this->manufacturer = $manufacturer;
        $this->inventory = $inventory;
        $this->discount = $discount;
    }
}
وارد حالت تمام صفحه شوید

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

الگوی Builder می تواند این مشکل را حل کند.

class Product
{
    private $id;
    private $name;
    private $price;
    private $description;
    private $manufacturer;
    private $inventory;
    private $discount;

    public function __construct(ProductBuilder $builder)
    {
        $this->id = $builder->getId();
        $this->name = $builder->getName();
        $this->price = $builder->getPrice();
        $this->description = $builder->getDescription();
        $this->manufacturer = $builder->getManufacturer();
        $this->inventory = $builder->getInventory();
        $this->discount = $builder->getDiscount();
    }

    // getters for product details will go here
}

class ProductBuilder
{
    private $id;
    private $name;
    private $price;
    private $description;
    private $manufacturer;
    private $inventory;
    private $discount;

    public function setId($id)
    {
        $this->id = $id;
        return $this;
    }

    public function setName($name)
    {
        $this->name = $name;
        return $this;
    }

    public function setPrice($price)
    {
        $this->price = $price;
        return $this;
    }

    public function setDescription($description)
    {
        $this->description = $description;
        return $this;
    }

    public function setManufacturer($manufacturer)
    {
        $this->manufacturer = $manufacturer;
        return $this;
    }

    public function setInventory($inventory)
    {
        $this->inventory = $inventory;
        return $this;
    }

    public function setDiscount($discount)
    {
        $this->discount = $discount;
        return $this;
    }

    // getters will go here

    public function build()
    {
        return new Product($this);
    }
}
وارد حالت تمام صفحه شوید

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

در این مثال، کلاس ProductBuilder وظیفه ساخت گام به گام شی Product را بر عهده دارد. خود کلاس Product یک سازنده با آرگومان ProductBuilder دارد. به این ترتیب، ما اطمینان حاصل می کنیم که یک شی محصول همیشه در حالت کامل ایجاد می شود.

$productBuilder = new ProductBuilder();
$product = $productBuilder
                ->setId(101)
                ->setName('iPhone 13')
                ->setPrice(999.99)
                ->setDescription('New iPhone 13 with A15 Bionic chip')
                ->setManufacturer('Apple Inc.')
                ->setInventory(1000)
                ->setDiscount(10)
                ->build();
وارد حالت تمام صفحه شوید

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

همانطور که به پایان کاوش در الگوی سازنده می رسیم، واضح است که چرا آن را به عنوان سنگ بنای جهان برنامه نویسی شی گرا در نظر می گیرند. الگوی Builder مشکل ساخت اشیاء پیچیده را حل می کند، پیچیدگی را کاهش می دهد و خوانایی کد ما را افزایش می دهد.

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

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


PS PHP و TypeScript، یک خبر هیجان انگیز برای شما دارم! من در حال حاضر در حال نوشتن یک کتاب که به طور گسترده این موضوعات را پوشش می دهد. این مملو از مثال‌های عملی، توضیحات واضح و سناریوهای دنیای واقعی است که این الگوها را می‌توان به کار برد.

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

تو می توانی اشتراک در به وبلاگ من در dev.to و سپس به محض آماده شدن کتاب یک اعلان دریافت خواهید کرد. من نمی توانم منتظر بمانم تا آن را بخوانید و مهارت های کدنویسی خود را به سطح بعدی ارتقا دهید!


عکس توسط Ravi Avaala در Unsplash

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

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

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

همچنین ببینید
بستن
دکمه بازگشت به بالا