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: Laravel’da Resolver Kullanarak Servis Seçimini Basitleştirme
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 » Laravel’da Resolver Kullanarak Servis Seçimini Basitleştirme

Yazılım

Laravel’da Resolver Kullanarak Servis Seçimini Basitleştirme

teknomers
Son güncelleme: 27 Aralık 2025 19:37
teknomers
Paylaş
Paylaş

Gerçek hayatta Laravel uygulamarında, genellikle aynı işi farklı şekillerde yapan birden fazla servis sınıfı ile çalışırız. Örneğin, birden fazla ödeme geçidi, dış API sağlayıcıları veya bildirim hizmetleri.

Bu durum, hangi servisi kullanacağımıza karar vermek noktasında, kodumuzu if-else veya switch ifadeleriyle doldurmadan temiz bir şekilde karar vermek için bir zorluk oluşturur.

Bu yazıda, Laravel’de Resolver pattern’inin nasıl kullanılacağını pratik bir örnekle açıklayacağım.

Sorun: Çok Fazla if-else Koşulu
Uygulamamızda desteklenen birden fazla ödeme geçidi olduğunu varsayalım: Stripe ve PayPal.

Yaygın bir yaklaşım şu şekildedir:

if ($paymentType === 'stripe') {
            $service = new StripePaymentService();
        } elseif ($paymentType === 'paypal') {
            $service = new PaypalPaymentService();
        } else {
            throw new Exception();
        }

        $service->charge($data);
        

Bu yaklaşımda ne yanlış?

  • İş mantığı sıkı bir şekilde bağlı.
  • Yeni bir ödeme geçidi eklemek mevcut kodu değiştirmeyi gerektiriyor.
  • Test etmesi ve bakım yapması zor.
  • Açık/Kapalı Prensibi’ni ihlal ediyor.

Bu kod çalışıyor, ancak ölçeklenebilirliği düşük.

Resolver Nedir?

Resolver, çalışma zamanı verilerine dayanarak hangi servis implementasyonunun kullanılacağını belirleyen bir sınıftır.

Basitçe şu şekilde tanımlanabilir:

Bir resolver, sizin için doğru servis sınıfını döner; böylece iş mantığınız temiz kalır.

Gerçek Dönüşüm: Ödeme Servisi Resolver’ı

Yukarıdaki örneği bir Resolver pattern’i kullanarak tekrar düzenleyelim.

Adım 1: Ortak Bir Arayüz Oluşturma
Tüm ödeme servisleri aynı sözleşmeyi takip etmelidir.

interface PaymentServiceInterface
{
    public function charge(array $data): bool;
}

Adım 2: Servis Implementasyonları Oluşturma

Stripe Servisi

class StripePaymentService implements PaymentServiceInterface
{
    public function charge(array $data): bool
    {
        // Stripe ödeme mantığı
        return true;
    }
}

PayPal Servisi

class PaypalPaymentService implements PaymentServiceInterface
{
    public function charge(array $data): bool
    {
        // PayPal ödeme mantığı
        return true;
    }
}

Her servis kendi mantığını işler, ancak hepsi aynı arayüzü takip eder.

Adım 3: Resolver Sınıfı Oluşturma

class PaymentServiceResolver
{
    public function __construct(
        public readonly StripePaymentService $stripePaymentService,
        public readonly PaypalPaymentService $paypalPaymentService
    ) {}

    public function resolve(string $type): PaymentServiceInterface
    {
        return match ($type) {
            => $this->stripePaymentService,
            => $this->paypalPaymentService,
            default => throw new InvalidArgumentException(),
        };
    }
}

Neden constructor injection kullanılır?

  • Bağımlılıkları açık ve daha anlaşılır hale getirir.
  • Ünite test edilebilirliği artırır (servisleri kolayca mocklayabilirsiniz).
  • Resolver’ı temiz ve odaklı tutar.
  • Laravel’ın bağımlılık enjeksiyon konteynerinin tüm avantajlarını kullanır.

💡 Not: Servisleri resolver içinde app() ile çözümleyebilirsiniz, ancak constructor injection genellikle daha temiz bir mimari ve daha iyi test edilebilirlik sağlar.

Adım 4: Resolver’ı İş Mantığınızda Kullanın

class PaymentController extends Controller
{
    public function store(
        Request $request,
        PaymentServiceResolver $resolver
    ) {
        $paymentType = $request->get();

        $service = $resolver->resolve($paymentType);
        $service->charge($request->all());

        return response()->json([
            => ]);
    }
}

✨ Temiz, okunabilir ve genişletilebilir.

Yeni Bir Servis Eklemek Kolay

Sonradan Razorpay eklemek ister misiniz?

=> $this->razorpayPaymentService,
        

Kontrolörlerde veya iş mantığında herhangi bir değişiklik yapmanıza gerek kalmaz.

Resolver Kullanmanın Faydaları

✅ Daha temiz ve okunabilir kod

✅ Yeni hizmetleri kolayca ekleme

✅ SOLID prensiplerine uyma

✅ Merkezi hizmet seçimi mantığı

✅ Birim testlerini kolaylaştırma

Bonus: Resolver’ı Daha Esnek Hale Getirme

Değerleri hardcode etmek yerine, eşleştirmeyi bir yapılandırma dosyasına taşıyabilirsiniz:

// config/payment.php
return [
    => StripePaymentService::class,
    => PaypalPaymentService::class,
];

Resolver

class PaymentServiceResolver
{
    public function resolve(string $type): PaymentServiceInterface
    {
        $service = config($type);

        if (! $service) {
            throw new InvalidArgumentException();
        }

        return app($service);
    }
}

Bu, sisteminizi daha da yapılandırılabilir hale getirir.

Son Düşünceler

Resolvers, Laravel’de birden fazla servis implementasyonunu yönetmek için basit ancak güçlü bir pattern’dır.

Birden fazla API, ödeme geçidi veya sağlayıcı ile çalışıyorsanız, Resolvers kod kalitenizi önemli ölçüde artırabilir.

Kaynak: Laravel

Sıfır Kesinti ile Dağıtım Açıklandı: Deploynix’in Sorun Çıkarmadan Nasıl Gönderim Yaptığı
Laravel PHP Framework’ünü Anlama: Kapsamlı Bir Rehber
Laravel Maestro Başlangıç Kitlerine Katkıda Bulunma Sürecinde Değişikliklerinizi Kaybetmeme Yöntemleri
FFmpeg ve Laravel Kullanarak Günlük 30GB Video Depolama Nasıl Azaltılır?
Sıfırdan PHP Hata Ayıklayıcı Yapmanın Teknik Süreci
Bu Makaleyi Paylaş
Facebook Bağlantıyı Kopyala Yazdır
Paylaş
Önceki Makale 2026 Startup Battlefield: Temiz Teknolojide Dikkat Çeken Girişimler!
Sonraki Makale New York’ta Sosyal Medya Uyarı Etiketleri Zorunlu Hale Geldi!

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?