TLDR; Paket buradan görüntülenebilir.
Güvenilir Kod Tasarımı İçin Giriş:
Laravel ile çalışıyorsanız, observer yapısını kullanarak belirli model olaylarına yanıt vermek konusunda tecrübe sahibisinizdir. Ancak bu yapının içinde barındırdığı bazı sorunlar, büyük ve karmaşık projelerde sıkça karşılaşılan zorluklar yaratabilir. Bu yazıda, Laravel’deki observer yapılarını nasıl daha verimli hale getirebileceğinizi ve ‘Laravel Column Watcher’ paketinin bunu nasıl sağladığını inceleyeceğiz.
Observes’in Sıklıkla Karşılaşılan Sorunları
1. God Class Problemi
Observer sınıflarınız birden fazla sorumluluk taşıdığında, kod karmaşası artar. Örneğin, bir kullanıcı modeli üzerinde yapılan her değişiklik için birden fazla işlemi gerçekleştiren bir observer oluşturduğunuzda, bu ‘God Class’ yapısına dönüşebilir. Bu yaklaşım, Tek Sorumluluk İlkesi’ni ihlal eder.
2. Test Zorluğu
Observer’lerde bir değişikliği test etmek genellikle zor olur, çünkü bir yığın bağımlılığı test etmeniz gerekir. Bu, kalabalık ve karmaşık bir test yapısına yol açar. Örneğin, bir durum değişikliğinin e-posta göndermesi gerektiğini test ettiğinizde, Salesforce, Stripe ve Slack gibi tüm bağımlılıkları taklit etmeniz gerekir.
3. Sıralama Yapılamaz Farklılıklar
Observer’ler sıralı bir şekilde çalışmaz, dolayısıyla her işlem bir diğerini etkileyebilir. Örneğin, bir durum değişikliği yapıldığında, bu değişikliğin diğer sistemlere yansıması bekleniyorsa, bunların sırasını kontrol etmeniz gerektiğinde işler karmaşıklaşır.
4. Gizli Yan Etkiler
Observer’ler genellikle service provider’larda kaydedilir. Böylece, bir geliştirici modeli açtığında, modelin güncellenmesinin arka planda API çağrılarına neden olacağını göremez. Yan etkiler, kritik noktalarda gizli kalır.
5. Granüler Kontrol Eksikliği
Observer’ler, model olaylarına bağlı olarak çalışır; ancak gerçek ihtiyaç, bir model alanında belirli değişikliklerin olmasıdır. Bu durum, her handler için aynı planı uygulamanızı gerektirir.
Daha İyi Bir Yöntem Var Mı?
Geliştirmenler olarak, özellikle büyük projelerde, daha iyi bir izleme ve yanıt verme yöntemi geliştirme ihtiyacımız var. İşte Laravel Column Watcher’ın sunduğu çözümler:
Laravel Column Watcher’ı Tanıtma
Bu paketle, belirli sütun değişikliklerinde belirli işlemler gerçekleştirmek için daha temiz ve etkili bir yol sunuluyor. Kodunuzdan tanıdık paralara benzer şekilde kullandığınızda, kodun içeriği üzerinde kontrol sağlar.
Kullanım Örneği:
composer require ascend/laravel-column-watcherModel İçinde Tanımlama:
#[Watch('status', SendStatusEmail::class)]
#[Watch('plan', SyncPlanToStripe::class)]
class User extends Model
{
// Model burada düz, temiz kalır.
}
Yazıcıların Yazımı
Her işlemci, belirli bir görevi yerine getiren odaklanmış bir sınıftır:
class SendStatusEmail extends ColumnWatcher
{
protected function execute(ColumnChange $change): void
{
Mail::to($change->model)->send(new AccountStatusChanged(...));
}
}
Test Yapısını Kolaylaştırma
Artık her bir işleyici için ayrı ayrı taklit yapabilir ve test edebilirsiniz:
public function test_status_change_sends_email(): void
{
SendStatusEmail::fake();
$user = User::factory()->create(['status' => 'pending']);
$user->update(['status' => 'active']);
SendStatusEmail::assertTriggered();
}
Sonuç
Laravel Column Watcher, kod karmaşasını en aza indirir ve uygulama mantığını daha temiz ve anlaşılır hale getirir. Projelerinizde bu yaklaşımları benimseyerek, performansı artırabilir ve hata oranlarını azaltabilirsiniz. Paket hakkında daha fazla bilgi için GitHub sayfasını ziyaret edebilirsiniz.
Kaynak: Orijinal Makale


