ozztech_logo_white

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​

DEAUTH ATTACK NEDİR?

Herhangi bir kablosuz ağda bağlı bulunan cihazları ağdan bağlantısını kesmeye yarayan bir saldırı çeşididir. Bu saldırıyı yapabilmek için hedef ağın MAC adresini bilmek gereklidir. İster

Devamı »
Hyper-V üzerinde sanal Switch oluşturma

Sanal Switch Nedir? Sanal switch, sanal işletim sistemlerimizin veya makinelerimizin kendileri arasında iletişim kurabilmesi ve sanal makinelerimizin ağa bağlanmaları için Hyper-V üzerinde varsayılan olarak gelen

Devamı »
Database Types

Database tiplerini anlatmadan önce, database kavramlarından bahsedelim. Veri Nedir? Veriye yaygın bir isim koymak gerekirse bilgi diyebiliriz. Veri her şey olabilir, Adın, yaşın , kilon,

Devamı »
SQL & NoSQL nedir?

SQL Nedir ? (Structed Query Language) Sql  aslında bakarsanız bir dildir.Veritabanları yönetmek için kullanılan bir dil olarak çıkar karşımıza. Veritabanı içerisinde yaptığımız hareketleri işlemleri bu

Devamı »