Exception Handling ve Global Hata Yakalama Mekanizmaları
Exception Handling ve Global Hata Yakalama Mekanizmaları
1. Konunun Mimari Önemi ve Temel Çalışma Prensipleri
Exception handling, yazılım mimarisinde çok önemli bir kavramdır. Bu mekanizma, uygulamanın çalışırken ortaya çıkan hataları yakalayarak programın çökmesini önler. Temel çalışma prensipleri arasında try-catch-finally blokları, finally bloğunun her zaman çalıştığı garantisi ve özel exception sınıflarının kullanılması sayılabilir. Bu prensipler, hataları belirli bir şekilde yöneterek, daha sağlam ve güvenilir uygulamalar geliştirme imkanı sunar.
2. Kurumsal Projelerde Dikkat Edilmesi Gereken En İyi Pratikler (Best Practices)
- Spesifik Exception Türlerini Kullan: Genel exception türlerini kullanmak yerine, hataları daha spesifik bir şekilde ele almak daha iyi bir uygulamadır.
- Exception Hiyerarşisini Kullan: .NET’te System.Exception sınıfından türetilen özel exception sınıfları kullanılmalıdır.
- Global Exception Handler Kullan: Global exception handler ile tüm uygulamada ortaya çıkan hataları bir yerde yönetebilirsiniz.
- Loglama: Hataların detaylı loglanması, sorunların daha hızlı tanı ve çözümü için önemlidir.
- Kullanıcıya Anlaşılır Hata Mesajları: Kullanıcıya gösterilecek hata mesajları genellikle spesifik exception ayrıntılarını içermemelidir.
3. Gerçek Dünya Senaryolarına Uygun Kod Bloğu Örneği
Aşağıda, C# (.NET MAUI) uygulamasında global exception handler ile hataları yönetme örneği bulunmaktadır:
using System;
using System.Threading.Tasks;
using Microsoft.Extensions.Logging;
public class GlobalExceptionHandler
{
private readonly ILogger _logger;
public GlobalExceptionHandler(ILogger logger)
{
_logger = logger;
}
public void ConfigureExceptionHandler(IServiceProvider services)
{
AppDomain.CurrentDomain.FirstChanceException += (sender, args) =>
{
_logger.LogError(args.Exception, "First Chance Exception: {Message}", args.Exception.Message);
};
AppDomain.CurrentDomain.UnhandledException += (sender, args) =>
{
_logger.LogError(args.Exception?.ToString(), "Unhandled Exception: {Message}", args.Exception?.Message);
};
TaskScheduler.UnobservedTaskException += (sender, args) =>
{
_logger.LogError(args.Exception?.ToString(), "Unobserved Task Exception: {Message}", args.Exception?.Message);
args.SetObserved();
};
}
}
4. Performans Optimizasyonu ve Olası Darboğazlar
Exception handling işlemi performans açısından yüksektir. Bu nedenle, exception’ların aşırı olarak kullanılması performans sorunlarına yol açabilir. Ayrıca, hataları çok genel bir şekilde yakalama, belirli hataların yönetilmesini zorlaştırabilir. Bu nedenle, exception handling mekanizmalarının etkin ve optimize olması için:
- Exception’ların sadece beklenen durumlarda kullanılmalıdır.
- Spesifik exception türlerine göre farklı işlemler yapılmalıdır.
- Exception’ların loglanması ve raporlanması sırasında performans kaybını önlemek için asenkron loglama kullanılmalıdır.





