Kapat
Anasayfa 51 0

Aspect-Oriented Programming – AOP

Her ne kadar tekrarlı kod yazmaktan kaçınsak da büyük bir projede veya yeni düzenlemeler eklentilerle yazılan kod satırları uzadıkça uzamakta, bu da okunabilirlik, anlaşılabilir olma olasılıklarını düşürmektedir. Daha önceki yazılarımda da sıkça bahsettiğim üzere, kod yazarken “Kendini Tekrar Etme!”.

Kaliteli kod yazarak proje geliştirmek için temelde kodun tekrar kullanılabilirliği (reusability), okunabilirliği (readability), modularity ve bakımının yapılabilirliği (maintainability) özelliklerine dikkat ederek uygulama geliştirmemiz gerekir. Geliştirdiğimiz modüllerde ortak olarak kullandığımız bazı yapılar vardır. Bunlar Caching, Exception Handling, Logging, Performance, Transaction, Validation vb. Bu işlemler birer Cross Cutting Concern işlemleridir.

Cross Cutting Concerns Nedir?

Cross Cutting Concerns’ün Türkçe anlamı “Kesişen İlgiler”, “Çapraz Kesen İlgiler” diye geçmektedir. Katman bağımsız olması, projenin istenilen yerinde kullanılması ile bulunduğu yerden soyutlanmış olmasından kaynaklanmasından bu isme sahiptir.

Bir metodu ele alalım. Her business işleminde ortak olarak yaptığımız bazı işlemler vardır. Bunlar, metoda ilk istek atıldığında önce yetki kontrolü yap, ardından eğer yapılması gereken validation işlemleri varsa onları gerçekleştir, logla, cache ekle ya da sil, bir hata aldığımızda exception handling işlemlerini gerçekleştir. İşte tekrarlı kullandığımız bu işlemler bizim için birer Cross Cutting Concern‘dir. Bu işlemleri bir metod için gösterdik ama benzerlerini projenizin birçok yerinde yapmanız gerekir. AOP ise bize kesişen bu ilgilerin birbirinden ayrılması gerektiğini söylemektedir. Bu sayede sınıfın kendi sorumluluğunu yerine getirmesini (single responsibility principle), kodun daha okunur ve anlaşılır yapıda olmasını, aynı kodları çok daha kısa ve kolay bir şekilde tekrar kullanılmasını sağlayabiliriz.

Interceptor Nedir?

Interceptor metot çağrımları sırasında bir araya girerek kesişen ilgileri işletmemizi ve yönetmemizi sağlamaktadır. Metotların çalışmasında önce ya da sonra işlemlerimizi gerçekleştirebilmemize imkan sağlar.

Buraya kadar bahsetmiş olduğumuz yapıları kullanarak bir aspect oluşturalım. Öncelikle yapacağımız aspect, validation işlemleri için olacak. Metodlara gönderilen dto (data transfer object) için istediğimiz kontrolleri sağlayacağımız bir yapı olacak.

Metodu çalıştırmadan önce validation işlemleri yapması için MethodInterception’ın OnBefore metodunu override edeceğiz. OnBefore metodumuz bir validator alacak ve validation işlemlerini yapacağı sınıfın içindeki propertyleri gezip yazmış olduğumuz koşulları kontrol edecek. Fluent Validation ile bir validator oluşturalım.

Validator ve kontrol edeceği sınıfımızı alan yardımcı metodumuzu oluşturalım. Bu metodu birazdan yazacağımız validation aspect içerisinde kullanacağız.

Oluşturduğumuz validation, aspectimizi metodumuzun başına ekleyerek metodu çalıştırmadan validation işlemlerinin yapılmasını sağlayabiliriz.

Bu sayede asıl gerçekleşmesi istenen iş, metod içerisinde bulunacaktır. Metodlarımız daha okunaklı ve sadece yapması gereken işi sağlayacak kodları bulunduracaktır.

Aspect Oriented Programming’in Avantajları

  • Tekrar eden kod bloklarından bizi kurtarıyor, daha temiz ve anlaması kolay bir yapı oluyor.
  • Uygulamaların bakım ve geliştirme maliyetlerini azaltmış oluyor.
  • Modüler bir yapı elde etmemizi sağlıyor.

Merve Kibir {Merve Kibir}