Serdar YILMAZ / Software Developer
Bizimkisi Bir “Bug” Hikayesi...
Akbank Bankacılık Merkezi
Serdar Yılmaz C# – Merkezi İstisnai Durum Yönetimi

C# – Merkezi İstisnai Durum Yönetimi

.netTry-Catch-Finally blokları ile çalışma anında meydana gelen hataları nasıl yakalayabileceğimizi ve türlerine göre nasıl filtreleyebileceğimizi öğrendik. Hataların türlerine göre filtrelenmesi işleminde bazen Catch bloklarının sayısı bir hayli fazla olabilmekte.

ExampleClass sınıfının içerisinde tanımlanmış olan ExampleMethod_1 ve ExampleMethod_2 metotlarını inceleyecek olursak; Catch bloklarından dolayı metotların gövdesinde kod kalabalığı oluştuğunu görebiliriz. Üstelik henüz metodun görevini ve Catch bloklarının içeriğini yazmadık bile! ExampleMethod_1 ve ExampleMethod_2 gibi içerinde bir çok Catch bloğu barındıran, onlarca metodun oluşturduğu bir sınıftaki kod kalabalığını tahmin edebilirsiniz.

Tüm metotlarda Try-Catch-Finally bloklarını tekrar tekrar yazmak yerine, oluşan hataları yakalayan ve türlerine göre filtreleyen merkezi bir İstisnai Durum Yönetimi metodu oluşturarak, kod kalabalığını ciddi anlamda azaltabiliriz. Bunun için öncelikle yukarıdaki ExampleClass sınıfımızı Try-Catch bloklarından arındırıp, geriye sadece metotların görevlerini yani metotlar çağrıldığında çalışmasını istediğimiz kodları bırakıyoruz.

ExampleClass sınıfındaki Try-Catch bloklarını kaldırarak kod kalabalığını ciddi anlamda azalttık. Şimdi, ExampleMethod_1 ve ExampleMethod_2 metotlarının çalışması esnasında ortaya çıkan hataları yakalayan ve türlerine göre filtreleyen metodumuzu yazıyoruz.

Oluşturduğumuz ExceptionCatcher metodunu dikkatlice inceleyecek olursak; Action türünde bir parametre aldığını görebiliriz. Bu da şu anlama geliyor; biz ExceptionCatcher metoduna parametre olarak bir metot veya kod bloğu gönderebiliriz (Delegate’leri anlatacağım içeriklerde bu konuya daha detaylı bir şekilde değineceğim).

ExceptionCatcher metoduna parametre olarak gönderdiğimiz metotları Invoke() ile çağırmaktayız. Yani toparlayacak olursak; ExceptionCatcher metoduna parametre olarak ExampleMethod_1 ve ExampleMethod_2 metotlarını göndereceğiz ve Invoke() metodu ile bu metotları Try bloğu içerisinde çalıştırıp, hata oluşması durumunda da Catch blokları ile filtreleyeceğiz.

Son olarak ExceptionCatcher metoduna parametre olarak bir metot göndermek yerine, bir kod bloğu göndereceğimiz farklı bir örnek yapalım.

Yukarıdaki uygulamamızda ExceptionCatcher metoduna parametre olarak bölme işlemini gerçekleştiren kod bloğunu gönderdik. Göndermiş olduğumuz kod bloğu ExceptionCatcher metodunun Try bloğunda çalışacaktır. Klavyeden sayı yerine harf veya karakter girildiğinde veya sayi_2 değişkenine sıfır değeri atandığında oluşacak hatalar ilgili Catch bloğu tarafından yakalanacaktır.

Serdar YILMAZ


Bu İçeriği Arkadaşlarınızla Paylaşmak İster misiniz?

Bir Yorum Yapın