Takip et

EF Core Interceptor’larını Özümsemek: Dekoratör Desenini Kullanarak Boruya Bağlanmak

EF Core Interceptor’larını Özümsemek: Dekoratör Desenini Kullanarak Boruya Bağlanmak

Merhaba! Fatih Soysal olarak, Entity Framework Core (EF Core) ile çalışırken karşılaşabileceğiniz yaygın sorunlara çözümler üretmek ve performansınızı artırmak için buradayım. Bu yazıda, EF Core Interceptor’larını ve bunları Decorator desenini kullanarak nasıl etkin bir şekilde entegre edebileceğinizi detaylı olarak inceleyeceğiz. Interceptor’lar, veritabanı işlemlerinin pipeline’ına müdahale etmenizi sağlayan güçlü bir araçtır. Bu sayede logging, auditing, güvenlik kontrolleri gibi birçok işlevi kolayca ekleyebilirsiniz.

EF Core Interceptor’ları Nedir?

EF Core Interceptor’ları, veritabanı işlemlerini yakalamak ve bunları değiştirmek veya genişletmek için kullanabileceğiniz bir mekanizmadır. Örneğin, her bir sorgunun başlangıç ve bitiş zamanını kaydetmek, sorguyu loglamak veya veritabanına gönderilmeden önce verileri değiştirmek için interceptor’lar kullanabilirsiniz. Bu mekanizma, uygulamanızın çeşitli noktalarında ek fonksiyonellik eklemek için oldukça esnek ve güçlü bir yöntem sunar. Kısacası, EF Core’un olay işleyicileri gibidir, ancak daha güçlü ve daha kapsamlı bir şekilde çalışırlar.

Decorator Deseninin Gücü

Interceptor’ları daha yönetilebilir ve esnek hale getirmek için Decorator deseni kullanılabilir. Bu desen, bir nesnenin işlevselliğini dinamik olarak genişletmeyi sağlar, bu da interceptor’larınızı birbirine zincirleme ve farklı işlevleri birleştirme olanağı sunar. Örneğin, bir logging interceptor’ı ve bir güvenlik interceptor’ını bir arada kullanmak isteyebilirsiniz. Decorator deseni ile bunu kolayca yapabilirsiniz. Bunun yanı sıra, kodunuzun daha temiz ve okunabilir olmasını sağlar.

Pratik Örnek: Logging Interceptor

Şimdi bir logging interceptor’ı nasıl oluşturacağımıza bakalım. Aşağıdaki kod, her bir veritabanı işleminin başlangıç ve bitiş zamanını loglayan bir interceptor örneğidir:


public class LoggingInterceptor : DbCommandInterceptor
{
    public override InterceptionResult ReaderExecuting(
        DbCommand command,
        CommandEventData eventData,
        InterceptionResult result)
    {
        // Loglama işlemi burada yapılabilir.
        Console.WriteLine($"Komut Başlangıcı: {command.CommandText}");
        return result;
    }

    public override void ReaderExecuted(
        DbCommand command,
        CommandEventData eventData,
        DbDataReader result)
    {
        // Loglama işlemi burada yapılabilir.
        Console.WriteLine($"Komut Sonu: {command.CommandText}");
    }
}

Bu interceptor, DbCommandInterceptor sınıfından türetilir ve ReaderExecuting ve ReaderExecuted metotlarını geçersiz kılar. Bu metotlar, bir sorgunun yürütülmesinden önce ve sonra çağrılır. Bu örnekte, sorgunun metni konsola yazdırılır. Ancak, bu logları bir dosyaya yazdırmak veya bir loglama sistemine göndermek de mümkündür.

Interceptor’ları Kaydetme

Oluşturduğunuz interceptor’ları, EF Core uygulamanızda kaydetmeniz gerekir. Bunun için, DbContextOptionsBuilder sınıfının AddInterceptors metodunu kullanabilirsiniz:


services.AddDbContext(options =>
{
    options.UseSqlServer(connectionString)
           .AddInterceptors(new LoggingInterceptor());
});

Bu kod, LoggingInterceptor’ı EF Core pipeline’ına ekler. Artık, tüm veritabanı işlemleri bu interceptor tarafından yakalanacaktır.

Sonuç

EF Core Interceptor’ları, veritabanı işlemlerini kontrol etme ve genişletme için güçlü bir araçtır. Decorator deseni ile birlikte kullanıldığında, interceptor’larınızı daha yönetilebilir ve esnek hale getirebilirsiniz. Bu, uygulamanızın performansını artırmak, güvenliğini sağlamak ve geliştirmeyi kolaylaştırmak için çok faydalı olacaktır. Daha fazla bilgi için fatihsoysal.com adresini ziyaret edebilirsiniz.

Umarım bu makale faydalı olmuştur. Sorularınız veya yorumlarınız varsa, lütfen bana bildirin. Başka bir yazıda görüşmek üzere!

Faydalı Bulduğum Kaynaklar:

#Etiketler: EF Core, Interceptor, Decorator Pattern, Veritabanı, ORM, .NET, C#, Performans, Logging, Güvenlik, DbContext, DbCommandInterceptor, AddInterceptors

Yorumlar
İçeriği beğendiniz mi? Bir tartışma başlatın veya görüşlerinizi paylaşın.
Yorum Yaz

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

E-posta Bülteni
Yazılım Topluluğuna Katılın
En son güncellemeleri, yaratıcı ipuçlarını ve özel kaynakları doğrudan e-posta kutunuza alın. Tasarım ve inovasyonun geleceğini birlikte keşfedelim.