Teknomers | Dünyadan Güncel Teknoloji | Oyun | Müzik | Film | Spor HaberleriTeknomers | Dünyadan Güncel Teknoloji | Oyun | Müzik | Film | Spor HaberleriTeknomers | Dünyadan Güncel Teknoloji | Oyun | Müzik | Film | Spor Haberleri
Yazı Tipi BoyutlandırıcıAa
  • Anasayfa
  • Teknoloji
    • Siber Güvenlik
    • Yapay Zeka
    • Donanım
    • Bilim
  • Yazılım
  • Savunma & İstihbarat
  • Oyun
  • Yaşam
    • Finans
    • Sinema
    • Dünyadan Haberler
  • İş Birliği
Okuma: PHP/Laravel’de Builder Tasarımı: Temiz ve Esnek Sipariş Nesneleri Oluşturma
Paylaş
Yazı Tipi BoyutlandırıcıAa
Teknomers | Dünyadan Güncel Teknoloji | Oyun | Müzik | Film | Spor HaberleriTeknomers | Dünyadan Güncel Teknoloji | Oyun | Müzik | Film | Spor Haberleri
Ara
Bizi Takip Et
  • Hakkımızda
  • Gizlilik politikası
  • Tanıtım Yazısı ve Backlink Hizmeti
© 2026 Teknomers. All Rights Reserved.

Anasayfa » PHP/Laravel’de Builder Tasarımı: Temiz ve Esnek Sipariş Nesneleri Oluşturma

Yazılım

PHP/Laravel’de Builder Tasarımı: Temiz ve Esnek Sipariş Nesneleri Oluşturma

teknomers
Son güncelleme: 11 Şubat 2026 03:38
teknomers
Paylaş
Paylaş

Uygulamada, e-ticaret sistemlerindeki siparişler genellikle zamanla evrim geçirir ve bu da onları Builder Pattern için mükemmel bir aday haline getirir.

Bir e-ticaret uygulamasında sipariş oluşturmak genellikle ilk başta basit görünür: bir müşteri ürünleri seçer, bunları bir sepete ekler ve ödeme yapar. Ancak, uygulamanız büyüdükçe, Sipariş sınıfı hızla karmaşık hale gelebilir. Opsiyonel indirimler, gönderim seçenekleri, hediye paketi seçeneği, farklı ödeme yöntemleri gibi durumları yönetmek gerekebilir. Kısa süre içinde, yapıcı fonksiyon şu şekilde görünür:

$order = new Order(
    $customerId,
    $items,
    $paymentMethod,
    $shippingAddress,
    $discountCode,
    $giftWrap = true,
    $specialInstructions = null
);
Enter fullscreen mode
Exit fullscreen mode

Bu durum hem okunması zor hem de sipariş oluştururken hata yapmayı kolaylaştırır. Bu nedenle, Builder Pattern doğal bir çözüm haline gelir. Bu yöntem, nesneleri adım adım inşa etmenizi sağlar, opsiyonel parametreleri şık bir şekilde yönetir ve kodunuzun okunabilir ve sürdürülebilir olmasını sağlar.

Bu makalede, PHP/Laravel’daki Sipariş sınıfına Builder Pattern nasıl uygulanır, okunabilirliği, test edilebilirliği ve esnekliği nasıl artırır, keşfedeceğiz.


Builder Pattern Neden Siparişler İçin Kullanışlıdır?

Builder Pattern, özellikle aşağıdaki durumlarda faydalıdır:

  • Sınıfın birçok opsiyonel parametreye sahip olması
  • Sınıfın karmaşık kurulum veya doğrulama gerektirmesi
  • Uzun yapıcıları önlemek istemeniz
  • Açık, okunabilir, akıcı kod istiyorsanız

E-ticarette, siparişlerin çoğu bu kriterleri karşılar. Bir yapılandırıcı kullanarak, sınıfın işlevselliği ile yapılandırma mantığını ayırabilir ve bakımını daha kolay hale getirebiliriz.


Adım 1: Sipariş Sınıfını Tasarlamak

İlk olarak, nihai bir siparişi temsil eden basit bir Sipariş sınıfı ile başlayalım. Bir sipariş oluşturulduğunda değişmez olduğunu varsayalım:

class Order
{
    public function __construct(
        public int $customerId,
        public array $items,
        public string $paymentMethod,
        public string $shippingAddress,
        public ?string $discountCode = null,
        public bool $giftWrap = false,
        public ?string $specialInstructions = null
    ) {}
}
Enter fullscreen mode
Exit fullscreen mode

Ancak, yapıcı hâlâ çok sayıda parametre alıyor, bunların bazıları opsiyonel. Bu çalışsa da, gelecekte daha fazla seçenek eklenirse ölçeklenebilirliği zor hale gelir.


Adım 2: Sipariş Yapıcısını Oluşturmak

Olayları adım adım yönetmek için bir SiparişYapıcısı sınıfı oluşturabiliriz:

class OrderBuilder
{
    private int $customerId;
    private array $items = [];
    private string $paymentMethod = 'credit_card';
    private string $shippingAddress = "";
    private ?string $discountCode = null;
    private bool $giftWrap = false;
    private ?string $specialInstructions = null;

    public static function create(): self
    {
        return new self();
    }

    public function customerId(int $customerId): self
    {
        $this->customerId = $customerId;
        return $this;
    }

    public function addItem(array $item): self
    {
        $this->items[] = $item;
        return $this;
    }

    public function paymentMethod(string $method): self
    {
        $this->paymentMethod = $method;
        return $this;
    }

    public function shippingAddress(string $address): self
    {
        $this->shippingAddress = $address;
        return $this;
    }

    public function discountCode(string $code): self
    {
        $this->discountCode = $code;
        return $this;
    }

    public function giftWrap(bool $flag): self
    {
        $this->giftWrap = $flag;
        return $this;
    }

    public function specialInstructions(string $instructions): self
    {
        $this->specialInstructions = $instructions;
        return $this;
    }

    public function build(): Order
    {
        if (empty($this->customerId)) {
            throw new \InvalidArgumentException('Müşteri ID\'si gereklidir.');
        }

        if (empty($this->items)) {
            throw new \InvalidArgumentException('En az bir ürün gereklidir.');
        }

        if (empty($this->shippingAddress)) {
            throw new \InvalidArgumentException('Gönderim adresi gereklidir.');
        }

        return new Order(
            $this->customerId,
            $this->items,
            $this->paymentMethod,
            $this->shippingAddress,
            $this->discountCode,
            $this->giftWrap,
            $this->specialInstructions
        );
    }
}
Enter fullscreen mode
Exit fullscreen mode

Önemli birkaç noktayı fark edin:

  • Açık arayüz: Her ayarlayıcı $this döner ve zincirleme çağrılara izin verir.
  • build() içinde doğrulama: Zorunlu alanlar, Order oluşturmadan önce kontrol edilir.
  • Aşamalı inşaat: Öğeler eklenebilir veya seçenekler birer birer ayarlanabilir.


Adım 3: Yapıcıyı Kullanmak

Bir sipariş oluşturma durumu yapıcı olmadan şu şekilde görünür:

$order = new Order(
    123,
    [['product_id' => 1, 'quantity' => 2], ['product_id' => 5, 'quantity' => 1]],
    'paypal',
    '123 Ana Cadde, Şehir, Ülke',
    'DISCOUNT10',
    true,
    'Kapıda bırakın'
);
Enter fullscreen mode
Exit fullscreen mode

Sonuç olarak, okunması zor ve hata yapmaya eğilimlidir.

Yapıcı ile bu daha sade hale gelir:

$order = OrderBuilder::create()
    ->customerId(123)
    ->addItem(['product_id' => 1, 'quantity' => 2])
    ->addItem(['product_id' => 5, 'quantity' => 1])
    ->paymentMethod('paypal')
    ->shippingAddress('123 Ana Cadde, Şehir, Ülke')
    ->discountCode('DISCOUNT10')
    ->giftWrap(true)
    ->specialInstructions('Kapıda bırakın')
    ->build();

Enter fullscreen mode
Exit fullscreen mode
  • Çok daha temiz ve okunabilir.
  • Opsiyonel alanları atlamak ya da daha fazla ürün eklemek kolaydır.
  • Doğrulama, tüm zorunlu alanların ayarlandığından emin olur.


Adım 4: Laravel Görevleri veya Hizmetleri ile Entegre Etme

Laravel’de, siparişler genellikle asenkron olarak İşler veya Hizmetler kullanılarak işlenir. Yapıcılar bunu daha kolay hale getirir:

$order = OrderBuilder::create()
    ->customerId($user->id)
    ->addItem(['product_id' => $product->id, 'quantity' => 1])
    ->shippingAddress($user->address)
    ->build();

dispatch(new ProcessOrderJob($order));

Enter fullscreen mode
Exit fullscreen mode

Ayrıca, yaygın sipariş kurulumları için tekrar kullanılabilir şablonlar oluşturabilirsiniz:

class OrderBuilderFactory
{
    public static function giftOrder(int $customerId, array $items, string $address): OrderBuilder
    {
        return OrderBuilder::create()
            ->customerId($customerId)
            ->shippingAddress($address)
            ->giftWrap(true)
            ->paymentMethod('credit_card')
            ->addItem(...$items);
    }
}

$order = OrderBuilderFactory::giftOrder($user->id, $items, $user->address)->build();

Enter fullscreen mode
Exit fullscreen mode

Bu desen, standartlaştırılmış sipariş türleri olan durumlar için mükemmeldir, örneğin hediyeler veya toplu siparişler gibi.


Adım 5: Builder Pattern Kullanmanın Avantajları

  1. Okunabilirlik: Siparişlerin oluşturulması, bir dizi talimat gibi okunur.

  2. Doğrulama: Tüm zorunlu alanlar bir yerde kontrol edilir.

  3. Esneklik: Opsiyonel alanlar, geri kalanını etkilemeden atlanabilir.

  4. Test edilebilirlik: Yapıcılar, Sipariş sınıfından bağımsız olarak test edilebilir.

  5. Genişletilebilirlik: Yeni opsiyonel özelliklerin (ör. hediye paketi, promosyon kodları) eklenmesi mevcut kodu bozmaz.


Adım 6: Ne Zaman Yapıcı Kullanılmamalı

Her zaman yapıcılar gerekli değildir. Aşağıdaki durumlarda kullanmaktan kaçının:

  • Sınıfın yalnızca 2–3 parametreye sahip olması.
  • Nesneler, opsiyonel parametreleri olmayan basit DTO’lar ise.
  • Açık API’ler gereksiz karmaşıklık ekliyorsa.

Küçük nesneler için basit bir yapıcı veya isimlendirilmiş yapıcılar yeterli olabilir.


Adım 7: Özet

Builder Pattern, PHP ve Laravel’de karmaşık nesne yaratımını yönetmek için basit ama güçlü bir yöntemdir. Yapıyı nesneden ayırarak, kodunuzun okunabilir, sürdürülebilir ve test edilebilir olmasını sağlar.

Sipariş sınıfı gibi birçok opsiyonel özelliğe sahip bir yapıcı kullanımı, uzun, karmaşık yapıcılarla uğraşmadan örnekleri oluşturmanın şu anda basit, adım adım bir yolunu sağlar.

Anahtar çıkarımlar:

  • Builder kullanın, karmaşık veya opsiyonel-hafif nesneler için.
  • build() metodunda doğrulama tutun.
  • Okunabilirlik için açık arayüzleri kullanın.
  • Tekrar kullanılabilir şablonlar için fabrika metodunu düşünün.

Builder Pattern ile sipariş oluşturma kodunuz uygulamanızla birlikte büyüyebilir—parametreler ve karmaşadan oluşan bir karmaşaya dönüşmeden.

Kaynak: Orijinal Makale

Contents
  • Builder Pattern Neden Siparişler İçin Kullanışlıdır?
  • Adım 1: Sipariş Sınıfını Tasarlamak
  • Adım 2: Sipariş Yapıcısını Oluşturmak
  • Adım 3: Yapıcıyı Kullanmak
  • Adım 4: Laravel Görevleri veya Hizmetleri ile Entegre Etme
  • Adım 5: Builder Pattern Kullanmanın Avantajları
  • Adım 6: Ne Zaman Yapıcı Kullanılmamalı
  • Adım 7: Özet
Neuron AI Laravel SDK – Geliştirici Topluluğu
Laravel’de Eloquent ORM’ye Giriş
N+1 Sorunlarını ve Yavaş Sorguları Laravel Üretim Performansınızı Düşürmeden Durdurun
Fikirden 10K $ Aylık Tekrar Eden Gelire: Her Gelir Dönüm Noktasında Altyapı Kararları
Harika Laravel & Filament: Nihai Seçilmiş Kaynaklar Listesi – Ve Yardımınıza İhtiyacımız Var!
Bu Makaleyi Paylaş
Facebook Bağlantıyı Kopyala Yazdır
Paylaş
Önceki Makale Google öğrenci gazetecinin kişisel ve mali bilgilerini ICE’ye gönderdi
Sonraki Makale Bezos Washington Post’un Yerel Haber ve Spor Muhabirlerini Kurtarabilirdi

Sanal Medya

FacebookBeğen
452Takip Et
PinterestSabitle
237Takip Et

Son Eklenenler

Donanım Meraklıları: Computex 2026, 3. Gün – Taipei’de Sıcaklık Artıyor
Donanım
Kritik Uyarı: 2026 FIFA Dünya Kupası Dolandırıcılıklarına Dikkat!
Siber Güvenlik
Acil! Cisco, SD-WAN’da yamanmamış sıfır gün açığına dikkat çekti
Siber Güvenlik
Surface Laptop Ultra’nın RTX Spark Süper Çip için 110W TDP hedefi
Donanım
Acil: PCPJack 230 AWS ve Google Cloud Sunucusunu Ele Geçirdi!
Siber Güvenlik
Bellek Çökmesi Yaşamadan Milyonları İşleme: Laravel Lazy Collections
Yazılım
//

Siber güvenlik, yapay zeka ve savunma sanayiinden; finans ve sinema dünyasına uzanan geniş bir yelpaze. Teknomers; teknoloji, strateji ve yazılım dünyasını sade bir dille sizlerle buluşturuyor.

Kurumsal

  • Hakkımızda
  • Gizlilik politikası
  • Tanıtım Yazısı ve Backlink Hizmeti

Kategoriler

  • Teknoloji
  • Oyun
  • Sinema
  • Siber Güvenlik
  • Bilim
  • Finans
  • Dünyadan Güncel Haberler

Populer

  • TV'de Ücretsiz İzlenebilen Şifresiz Erotik Kanallar (2025 Güncel Frekans Listesi)

  • The Last of Us PC Kontrolleri: Hızlı Silah Değiştirme ve Tüm Tuşlar (2025)

  • Hogwarts Legacy'de Odaklanma İksiri Nasıl Yapılır?

Teknomers | Dünyadan Güncel Teknoloji | Oyun | Müzik | Film | Spor HaberleriTeknomers | Dünyadan Güncel Teknoloji | Oyun | Müzik | Film | Spor Haberleri
Bizi Takip Et
© 2026 Teknomers. All Rights Reserved.
Welcome Back!

Sign in to your account

Kullanıcı Adı veya E-posta Adresi
Şifre

Şifrenizi mi unuttunuz?