Neden Bu Önemli?
Neden Bu Önemli?
Uygulamanız büyüdükçe, bir e-posta gönderme veya metriği yayma yeri, alan mantığınızın nasıl yazılacağını belirlememelidir. Laravel’in olaylar, dinleyiciler ve gözlemciler kullanımı, denetleyicilerin ve hizmetlerin iş kurallarına odaklanmasına olanak tanırken yan etkileri test edilebilir ve değiştirilebilir bileşenlere taşımanıza olanak tanır. Bu, daha hızlı özellikler, daha az kazara regresyon ve daha net kod sahipliği anlamına gelir.
Sorun: Yan Etkiler Alan Kodunu Kirletiyor
Sorun: Yan Etkiler Alan Kodunu Kirletiyor
Denetleyiciler ve modeller, iş eylemlerini uygulamak için doğal yerlerdir, ancak aynı zamanda e-postalar, analizler, önbellek geçersiz kılma ve dış API çağrıları için atık alanlarına dönüşürler. Bu karışım, bağlantıyı artırır ve testleri kırılgan hale getirir. Sistemin bir parçası değiştiğinde (örneğin, 3. taraf API’si), temel alan hizmetlerine dokunmamalısınız.
Laravel, bunu düzeltmek için tasarlanmış üç temel etkinliği sunar:
- Events — anlamlı bir şeyin olduğunu duyurur.
- Listeners — bu duyurulara yanıt verir ve yan etkileri yönetir.
- Observers — kalıcılıkla ilgili endişeler için model yaşam döngüsü kancalarına eklenir.
Basit ve Pratik Bir Desen
Basit ve Pratik Bir Desen
Olayları alanınızdan gelen “niyet” mesajları olarak kullanın. Dinleyicileri tek sorumluluk yan etki yöneticileri olarak tutun. Gözlemcileri yalnızca kalıcılığa sıkı sıkıya bağlı yaşam döngüsü endişeleri için kullanın (denetim, varsayılanlar), ana iş kuralları için değil.
Tipik bir akış:
- Denetleyici girişi doğrular ve bir alan hizmetini çağırır (örneğin, OrderService::placeOrder).
- Ana hizmet durumu kalıcı hale getirir ve bir OrderPlaced olayı ateşler (sadece kimlikler ve minimal meta veriler).
- Bir veya daha fazla dinleyici yan etkileri yönetir: onay e-postaları gönderme, envanteri ayırma, metrikleri yayma.
- Gözlemciler, çapraz kesim kalıcılık eylemleri için model kayıtlarını izler (örneğin, türetilmiş alanları ayarla, denetim izleri).
Neden Bu Düzen Yardımcı Olur?
Neden Bu Düzen Yardımcı Olur?
- Düşük bağlılık: hizmetler ne olduğunu açıklar, dinleyiciler ne yapacağına karar verir.
- Daha iyi test edilebilirlik: hizmet testlerinde olayların yayınlandığını doğrulayın; dinleyicileri bağımsız olarak test edin.
- Operasyonel esneklik: bir senkron dinleyiciyi kuyruklanmış bir işe değiştirmek, alan koduna dokunmadan mümkündür.
- Açık sahiplik: ürün özellikleri alan olaylarını tanımlar; altyapı/operasyon dinleyicileri ve entegrasyonları sahiplenir.
Hızlı Uygulama İpuçları
Hızlı Uygulama İpuçları
- Olay yüklerini küçük tutun: kimlikleri ve minimal meta verileri geçirin, tüm Eloquent modellerini değil.
- Gerekirse dinleyiciler içinde modelleri besleyin; bu, olay sözleşmesini kararlı tutar.
- İ/O yoğun işlemler (e-posta, HTTP çağrıları) için kuyruklu dinleyicileri tercih edin, bu bloklama taleplerini önler.
- Gözlemcileri merkezi olarak kaydedin (örneğin, AppServiceProvider) böylece yaşam döngüsü endişeleri görünür ve testlerde kolayca taklit edilebilir.
- Olayları ve bunları tüketen dinleyicileri bir README dosyasında belgeleyin, böylece yeni mühendisler hızlıca adapte olabilir.
Örnek Minimum Akış (Kavramsal)
Örnek Minimum Akış (Kavramsal)
- OrderController -> OrderService::placeOrder($dto)
- OrderService siparişi kalıcı hale getirir, yeni bir OrderPlaced($order->id, $user->id) olayı ateşler.
- Dinleyiciler: SendOrderConfirmation, AllocateInventory, EmitOrderMetric
- OrderObserver::created, türetilmiş alanlar veya kiracı varsayılanlarını yönetir.
Bu, “ne” (sipariş verildi) ile “nasıl” (e-posta, envanter, metrikler) arasındaki ayrımı korur.
Gerçek Dünya Senaryoları
Gerçek Dünya Senaryoları
- E-ticaret: Ödeme sonrası OrderPlaced olayını ateşleyin. Dinleyiciler stok ayırır, fatura oluşturur, bildirimi gönderir. Gözlemciler user.last_order_at bilgisini günceller.
- Çok kiracılı SaaS: Faturalama olayları için DomainActionPerformed olayını ateşleyin; dinleyiciler metrikleri analiz boru hatlarına iter ve eklenebilir denetim günlükleri oluşturur. Gözlemciler, model oluşturma sırasında kiracı varsayılanlarını uygular.
- Dış entegrasyonlar: Sevkiyat oluşturulduğunda, bir dinleyici lojistik API’sine gönderim yapar; yeniden deneme dinleyicisi hataları yönetir ve çağrıları yeniden kuyruklar, ayrıca bir ShipmentObserver takip kimliklerini atar.
Ne Zaman Olay veya Gözlemci Kullanılmamalıdır?
Ne Zaman Olay veya Gözlemci Kullanılmamalıdır?
- Doğrudan çağrının daha net olduğu basit tek kullanımlık yan etkiler için olay eklemeyin.
- Dinleyicilere veya gözlemcilere karmaşık iş kurallarını doldurmaktan kaçının: bunlar koordinasyon ve çapraz kesim endişeleri için, ana alan mantığı için değil.
- Davranışların alan hizmetlerine ait olduğu gözlemcileri kullanmayın; gözlemciler kalıcılığa bağlıdır, bu da davranışa beklenmedik şekilde sızabilir.
Test Etme ve Gözlemlenebilirlik
Test Etme ve Gözlemlenebilirlik
- Ana hizmetleri bir olayın belirli bir zamanda dağıtıldığını doğrulayarak birim test edin.
- Dinleyicileri sahte olaylarla başlatarak ve dış bağımlılıkları taklit ederek test edin (posta, HTTP istemcileri).
- Yapılandırılmış günlükler kullanın ve dinleyici kuyruğunu, gecikmeyi ve hata oranlarını izleyin. Olay birikintisini takip edin ve duraklayan kuyruklar için uyarılar oluşturun.
Operasyonel Kontrol Listesi
Operasyonel Kontrol Listesi
- Denetleyicilerden ve modellerden yan etkileri belirleyin ve çıkartın.
- Önemli iş anları için net alan olayları tanımlayın.
- Her yan etki için bir dinleyici oluşturun; I/O bağlı dinleyicileri kuyruklayın.
- Gözlemcileri yalnızca Eloquent yaşam döngüsü endişeleri için kaydedin.
- Olayların dağıtıldığını ve dinleyicilerin doğru davrandığını doğrulayan testler ekleyin.
- Kuyrukları, hataları ve verimliliği izleyin.
Next.js Ön Yüzlerle Entegrasyon
Next.js Ön Yüzlerle Entegrasyon
Laravel iş mantığını yönetirken ve Next.js arayüzü yönlendirirken, sunucuya özel sorumlulukları (e-postalar, arka plan işlemesi) dinleyiciler içinde tutun. Gerçek zamanlı arayüz güncellemeleri için, ilgili olayları web soketlerine veya SSE’ye yayınlayın ve Next.js ön yüzünün durum değişikliklerine abone olmasına izin verin.
Tam yürütme ve bu makaleden örnekler için bu bağlantıyı kontrol edin.
Sonuç
Sonuç
Alan niyetini (olaylar) yan etkilerden (dinleyiciler) ve kalıcılık endişelerinden (gözlemciler) ayırmak, Laravel uygulamalarını bakımını, test edilmesini ve işletilmesini kolaylaştırır. Küçük başlayın: en kolay yan etkileri dinleyicilere çıkarın, ağır işler için kuyruk ekleyin ve olaylarınızı belgeleyin.
Kaynak: Orijinal Makale
- Neden Bu Önemli?
- Sorun: Yan Etkiler Alan Kodunu Kirletiyor
- Basit ve Pratik Bir Desen
- Neden Bu Düzen Yardımcı Olur?
- Hızlı Uygulama İpuçları
- Örnek Minimum Akış (Kavramsal)
- Gerçek Dünya Senaryoları
- Ne Zaman Olay veya Gözlemci Kullanılmamalıdır?
- Test Etme ve Gözlemlenebilirlik
- Operasyonel Kontrol Listesi
- Next.js Ön Yüzlerle Entegrasyon
- Sonuç


