Asp.NET Core – SignalR Serisi #9 – Strongly Typed Hubs
Merhaba,
Yazılım uygulamalarında sistemler arası haberleşmeleri yahut ortak tanımlamaları statik metinsel değerler üzerinden sağlamaya çalışmak, hata yapma ihtimalini arttırmakta ve böylece sürece ister istemez ekstra bir zorluk kazandırılmaktadır. Bu durum SignalR mimarisinde oldukça karşılaşılmakta ve server’ın client’ta ki herhangi bir metodu tetikleyebilmesi için genellikle aşağıdakine benzer geliştirilen kodlarda, tanımlanan metinsel değerler yer yer yanlış yazılabilmekte, karıştırılabilmekte yahut unutulabilmektedir;
public class MyHub : Hub { public async Task SendMessage(string message) { await Clients.All.SendAsync("receiveMessage", message); } }
Burada ‘SendMessage’ metodu ‘invoke’ edilen hub kendisine bağlı olan client’lar da ki ‘receiveMessage’ metodunu tetiklemektedir. Haliyle buradaki ‘reveiveMessage’ değerinin metinsel olması her ne kadar client’ta tetiklenecek olan metodun net bildirilmesini sağlıyor olsada, derleme açısından herhangi bir denetime tabii tutulmamasından dolayı yer yer SignalR uygulamasındaki standartı sağlama çabasında ekstra enerji sarf edilmesini gerektirmekte ve bunun yanında programatik bir davranıştan uzak bir şekilde kod geliştirilmesine sebebiyet vermektedir.
Strongly Typed Hubs özelliği ile türü kesin belirlenmiş hub’lar tanımlayarak, metinsel yapılanmanın yarattığı handikaplardan bir nebze olsun arınabilmeyi ve client’ta tetiklenecek olan metot bildiriminin server’da derleme zamanındaki denetimini etkinleştirmeyi sağlayabiliriz. Bunun için bir interface aracılığıyla client’ta tetiklenecek olan metotların imzalarının modellenmesi ve ilgili Hub’a bildirilmesi yeterlidir.
Şöyle ki;
public interface IMessageClient { Task ReceiveMessage(string message); }
public class MyHub : Hub<IMessageClient> { public async Task SendMessage(string message) { await Clients.All.ReceiveMessage(message); } }
Görüldüğü üzere ‘Hub’ sınıfı generic olarak oluşturulan interface’i almakta ve ardından client’lara yapılacak isteklerde ilgili metot üzerinden tetiklemeyi başarıyla sağlamaktadır. Böylece tetikleyici unsur daha programatik bir davranışla devreye sokulmakta ve bir yandan da esas önemlisi derleyici tarafından denetim sağlanarak olası hatalar ortadan kaldırılmaktadır.
Bu yüzden Strongly Typed Hubs özelliğinin kullanılmasını ve client’lar da tetiklenecek olan metotların bu şekilde belirlenmesini kesinlikle önemser ve tavsiye ederim.
İlgilenenlerin faydalanması dileğiyle…
Sonraki yazılarımda görüşmek üzere…
İyi çalışmalar…