Wolverine en iyi uygulamaları: A-Frame ve handler tasarımı
JasperFx, 2023'ten kalan Wolverine en iyi uygulamalar sayfasını baştan yazdı. Yeni rehber A-Frame Architecture'ı merkeze alıyor, handler'ların ve hata yönetiminin nasıl bölüneceğini somut örneklerle anlatıyor. Mesajlaşma sistemleri geliştiren .NET ekipleri için pratik bir referans.
Kilit noktalar
- Handler'ları iş mantığı olarak yazın; veri yükleme için LoadAsync(), kararlar için Handle() kullanın
- Kalıcılık için [Entity] özniteliğini ve Storage.Update() gibi dönüş değerlerini tercih edin
- Yayımlanacak mesajları handler'ın dönüş değeri olarak döndürün, servislerin içinden publish etmeyin
- Doğrulamayı Validate() metodu, Data Annotations veya FluentValidation ile yapın; Result<T> sarmalayıcısına gerek yok
- Wolverine.HTTP ile yeni kodda controller ve mediator katmanını atlayın
- Handler içinde IMessageBus.InvokeAsync() ile handler çağırmaktan kaçının; iç içe transaction ve bağımsız hata riski oluşturur
Wolverine'ın 2023'te yazılan en iyi uygulamalar sayfası, kütüphanenin o dönemki sürümüne göre hazırlanmıştı ve artık bugünkü özelliklerin çoğunu kapsamıyor. Yazar Jeremy Miller, rehberi sıfırdan yeniden yazdığını duyuruyor. Yeni metin, iş mantığını altyapıdan ayıran A-Frame yaklaşımını ön plana çıkarıyor ve handler'ların kategorilere göre nasıl bölüneceğini ve hataların nasıl ele alınacağını anlatıyor.
Yaklaşımın özü, handler metodlarını saf fonksiyonlara yakın tutmak. Veri yükleme işi LoadAsync() gibi ayrı bir metoda, karar verme ise Handle() metoduna bırakılıyor. Wolverine, altyapı kodunu derleme zamanında veya başlangıçta üretiyor. Kalıcılık için [Entity] özniteliği, yan etkiler için dönüş değerleri ve cascading message'lar kullanılıyor. Rehber ayrıca repository soyutlamalarından ve iç içe InvokeAsync çağrılarından kaçınmayı öneriyor.
Gerçek dünyada kullanımı
- Fatura ödemesi gibi iş kurallarını HTTP katmanından bağımsız, birim testle doğrulanabilir tutmak
- Bir sipariş işleme servisinde mesaj yayımlama akışını handler imzasından takip edilebilir kılmak
- Eski MVC controller ve mediator yapısından Wolverine.HTTP endpoint'lerine kademeli geçiş yapmak
Neden önemli
Handler'ları A-Frame yapısında yazmak, veritabanı ve mesaj altyapısını test etmeden iş kurallarını doğrulamanızı sağlar. Veri erişimini handler'ın yanında tutmak da veritabanı round trip'lerini görünür kılar.