AOP(Aspect Oriented Programming)

Öncelikle daha önce bahsettiğimiz SOLID prensiplerine uyulmasını sağlayan AOP’nin çıkış noktası olan “Separation of Concern” ile yazımıza başlayalım. Yukarıda ki fotoğrafta görüldüğü üzere en basit şekilde merkezileştirerek dağınık karmaşık kod yazmayı engeller.

AOP (Aspect Oriented Programming)

Yeni bir proje oluşturuduğunuzda nesneler classlar oluşturulur belli işlemlerden sonra iş kurallarımızı yazdığımız kısımlara geçiyoruz. Bir yazılım inşa ederken en önemli husus kodun okunabilirliği ve kodun güncellenebilir halde olmasıdır. Bir geliştirici projeye katıldığında projenize adapte olması için kodun kurumsal mimarı ile temiz bir şekilde yazılması gerekir. AOP , bize kod iyileştirilmesi açısından bize büyük katkı sağlar. Daha önce oluşturduğumuz metotları istersek çalışması için projemize tek tek ekleyebiliriz fakat bu kodu karmaşık ve okunmaz bir hale getireceği için bunu kesinlikle tercih etmemeliyiz. SOLID derki kesinlikle benim prensiplerime uymalısın. AOP ile Core katmanı içerisine bir kere metodu oluşturduktan sonra eklemesi gayet basit. Örneğin veritabanı ekleme işlemi yapıldıktan sonra cache’in silinmesini istiyoruz. Yazdığımız metodun başına CACHE eklediğimizde metot her çalıştığında cache silinmiş oluyor. Bu sayede bizim kazancımız basit ve hızlı bir şekilde aksiyon almamızı sağlar.

AOP Çalışma Mantığı

Projemizde bulunan kesişen ilgilerimizin birbirinden ayrılması ve kod okunabilirliğini arttıran bir mimaridir. Örneğin veritabanına Add işlemi yapıyoruz, bu işlemi yaparken add metodu içerisindeki ;

  • Cacheleme
  • Loglama
  • Performance ölçümleri

gibi servislerin çalıştırılması SOLID prensiplerine aykırıdır. Hem kodlarımız karmaşık okunması zor bir hal alır, hem de her servisleri çalıştırmak istediğimiz yerde tek tek yazmamız gerektiği için güncellenmesi, gelecekte yeni metotlar eklendiğinde tekrar yazılması işleri zora sokar. Bu gibi sorunlar olmaması için AOP yöntemini kullanılırız.

AOP projemize nasıl ekleyebiliriz Autofac eklentisi ile ekleyebiliriz. Autofac aslında farklı bir yapı olduğu için nasıl dedirtebilir fakat içeririsinde Interceptor özelliği bulunmaktadır. Interceptor özelliğiyle kodlarımızın başına, sonuna, hata aldığımızda veya işlem başarıyla yürütüldüğünde araya girebileceiğimiz ve kolaylıkla yönetebileceğimiz bir özelliktir.

Örneğin yeni bir ürün eklemek istediğimizde ürün bilgilerini kontrol eden validation ve ekleme başarılı mı yoksa başarısız mı bilgisini loglatabiliriz.

AOP ve Cross-Cutting Corcern ilişkisi

Öncelikle Cross-Cutting Concern(Kesişen İlgiler) standart katmanlar yatay düzey şekilde ayrılır. Her katman birbirinden ayrılmış olarak oluşturulur fakat Cross-Cutting dik olarak kesmektedir. Dikey olarak kesmesi her katmanda kullanılabileceği anlamına gelir. Hemen her projede Cross-Cutting-Concern’e ihtiyaç duyarız fakat ihtiyaç olmayan bir projede AOP’de yok demektir çünkü AOP’yi bir katman olarak düşünseydik içerisinde C-C-C olurdu ama olmadığı durumda AOP’de yok demektir. Concern dediğimizde önümüze çıkan 3 tane kavram vardır bunlar:

  • Concern
  • Join Point
  • Pointcut

Join Point

Join Point , aklımıza ilk gelen önkoşul olabilir yani kodumuzun ne zaman çalışması gerektiğini belirtilmesidir.

Pointcut

Pointcut(Kesişim Noktası) Join Pointlerin kümesi diyebiliriz.

Side-Effect Concern

AOP’yi nasıl anlattık kodun başına ortasına sonuna konulabilir bir yapıdadır, eğer kodun çalışmasına herhangi bir etkisi yoksa buna Side-Effect denir. Örnek olarak loglamadan söz ettik, projeye müşteriyi ekleyip ekleyemediğimizi öğrenmek için loglarına bakabiliyoruz bu herhangi bir işleyişi değiştirmez.

Advice Concern

Side Effect aksine örnek olarak CustomerGetAll() gibi bir metot çağırılarken, cache metodunu etkinleştirirsek tekrardan müşterileri çağırdığımız zaman artık CustomerGetAll() çalışmaz yani derlenme kısmında bir etkisi vardır.

AOP’nin Örnek

Ufak bir örnek olarak ekleme başarılı mı? olarak loglayabileceğimiz bir örnek.

İlginizi Çekebilecek Makaleler​

LLM (Large Language Models) Nedir?

Günümüzde yapay zeka ve makine öğrenmesi, teknolojinin birçok alanında devrim niteliğinde ilerlemeler kaydetmiştir. Bu ilerlemelerin merkezinde yer alan büyük dil modelleri (LLM – Large Language

Devamı »
Message Broker Nedir?

Message broker, birçok farklı uygulama veya sistem arasında iletişim kurmak için kullanılan bir yazılım aracıdır. Bu araç, bir uygulama tarafından gönderilen mesajları bir veya daha

Devamı »
Loglama Nedir?

Loglama, bilgisayar sistemlerindeki olayları, hataları ve diğer önemli durumları kaydetme işlemidir. Bu kayıtlar, sistem yöneticileri ve geliştiriciler tarafından, sistemlerin işleyişini anlamak, hataları tespit etmek ve

Devamı »
Vcenter Üzerinden ESXI Upgrade’i Nasıl Yapılır?

Öncelikle herkese merhaba arkadaşlar, sizlere Vcenter üzerinde ESXI hostunuzu nasıl upgrade edeceğinizi anlatacağım. Öncelikle hangi versiyona yükselteceksek o versiyonun ISO dosyasını indiriyoruz. Ardından Vcenter’ımızı açıyoruz.

Devamı »