Aspect Oriented Programming (AOP) – Giriş ve Örnek Bir Proje

9 Cevaplar

  1. Cihan Özhan dedi ki:

    Merhaba Gökhan,

    Bu güzel makale için teşekkürler.

    “public class ProductService” sınıfı IProductService sınıfından implement edilmediği için yeni başlayan arkadaşlar sorunu tespit edemeyebilir.

    Ekte verdiğin kaynak kodlarda sorun yok. Orada implement..

    Başarılar.

  2. Tayfun dedi ki:

    Makale için teşekkürler .AOP konusunda çok detaylı makaleler bulamazken ilaç gibi geldi. 3rd party uygulamalara postsharp kullanımı konusunda uygulamalı anlatım olarak makalenin devamı gelir mi acaba ? 🙂

    • Gökhan Gökalp Gökhan Gökalp dedi ki:

      Merhaba teşekkür ederim öncelikle. Evet bir sonraki aop serisinde 3rd party uygulamalar ile nasıl intercept yapılabileceğini hakkında yazılar yazmayı düşünüyorum ama bu aralar biraz zaman sıkıntısı çekiyorum. 🙂

  3. Mehmet Baran dedi ki:

    Aop hakkında okuduğum en anlaşılır yazıydı. Teşekkürler

  4. Yunus Emre dedi ki:

    Benim kullanacağım sınıf bir abstract sınıftan türediği için sizin verdiğiniz örnekteki Proxy sınıfında bir takım değişiklikler yapmam gerekti fakat çok hakim olmadığım için doğru mu yaptım ya da daha pratik bir değişiklik ile çözülür müydü emin değilim.
    Değişiklikten sonra kod çalıştı ama production’a çıktığımızda gelecek çoklu isteklerde de doğru çalışır mı emin olamıyorum gerçi static bir metot kalmadı ama yine de göz atabilirseniz çok sevinirim.

    public class TransparentProxy : RealProxy where T : BaseBusiness, TI // BaseBusiness abstract classını ekledim ve new constraintini kaldırdım.
    {
    private T _creator;
    private MethodRequest _methodRequest; //Abstract classın zorunlu tuttuğu property bu. Bunu constructorda almak gerekli.

    public TransparentProxy(MethodRequest methodRequest) : base(typeof(TI))
    {
    _methodRequest = methodRequest;
    _creator = (T)Activator.CreateInstance(typeof(T), methodRequest);
    }

    public TI GenerateProxy() //Bu alan static tanımlanmıştı fakat constructorda alan aldığım için bunu değiştirdim.
    {
    var instance = new TransparentProxy(_methodRequest);
    return (TI)instance.GetTransparentProxy();
    }

    ……
    //Bundan sonra geri kalan tüm kod aynı sadece sizin new ile çağırdığınız aşağıdaki satırda ben new yerine _creator kullandım

    result = methodCallMessage.MethodBase.Invoke(_creator, methodCallMessage.InArgs);
    }

    Proxy’i çağırdığım kod;

    public UserController()
    {
    _userBusiness = new TransparentProxy(methodRequest).GenerateProxy();
    }

    • Gökhan Gökalp Gökhan Gökalp dedi ki:

      Merhaba şuan bir problem yaratacak durum görünmüyor fakat, performans testlerine bir bakmak gerek static constructor kullanılmadığı için herhangi bir etkisi olacak mı. Şuan herhangi bir test etmeden yorum yapamayacağım. Eğer performans concern’ünüz var ise de, runtime ao yerine compiletime ao tercih etmenizi önerebilirim. Bu noktada ise lightweight olarak Fody veya PostSharp’ı tavsiye edebilirim.

Bir Cevap Yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

*