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

Reddedilen Laravel PR’den Laravel Arr Genişletmesine: Arr::after Ekleme
Phantomshift/laravel-deployer ile Kesintisiz Laravel Dağıtımları Kolaylaştırıldı
Laravel 12 + React 18 + TypeScript ile Üretim Seviyesinde Çok Kiracılı SaaS Başlangıç Kiti Nasıl Oluşturdum?
Redis öncelikli spatie/laravel-permission alternatifinin karşılaştırması
Yazma-Üzerine Deseni: Asla Eskimiş Veri Sunma
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

Acil: Stripe Kullanarak Kredi Kartı Bilgileri Hırsızlığı Yapıldı
Siber Güvenlik
TikTok Yasakları: Aslında Neden Bu Kadar Önemliydi?
Genel
Waymo’nun Robotaksi Bataryaları Şebeke Depolama İçin Kullanılacak
Genel
Cyberdeck’ler Küçük Dizüstü Bilgisayarlardan Daha Kişisel Hale Geliyor
Liste
Retro Mac Mini ile OpenClaw kutunuzu geleceğe taşıyın
Donanım
Webcam Kandırmacası: Minecraft Modları İle Yayılıyor
Oyun
//

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?