AOP – 1
Temelde Aspect Orinted Programming yaklaşımı farklı uygulama seviyelerinde ve/veya farklı sınıflarda ortak amaçla kullanılan loglama, exception handling, tracing gibi enterprise bir yapıda olmazsa olmaz, ancak kod blokları içinde çokça tekrarlanan ve bakımı zorlaştıran katmanların/yapıların bussiness dışına çıkarılmasını amaçlar. Bu iş geliştirilmiş bir çok framework var. En önemlileri PostSharp ve Linfu.AOP. Ancak ben biraz daha detaylı bir inceleme için, frameworklerden birini alıp, nasıl AOP yapılır yazmak yerine, kendimiz nasıl temel prensiplere bağlı bir AOP yapısı geliştirebiliriz onu anlatmaya çalışacağım.
Örneğin
public double Divide(double x, double y) { try { return x / y; } catch (DivideByZeroException ex) { Logger.LogException(ex) throw (ex); } }
gibi bir kodumuz var. Burada loglama ve exception handlingi (herzaman olduğu gibi) kodun içinde yapıyoruz.
Ancak AOP yaklaşımı ile bu işi tamamen ilgili method içinden çıkarabiliyoruz.
ObjectProxy proxy = new ObjectProxy(); proxy.Aspects.After.Add(new LogAdvice()); proxy.Aspects.Error(new ExceptionHandlerAdvice()}); Calculator calc = proxy.Create<Calculater>(); calc.Divide();
Böylelikle bölme işlemi sadece
public double Divide(double x, double y) { return x / y; }
ile çözümlenebiliyor.
AOP yaklaşımı
- Cross-cutting concerns (CCC): Uygulama içinde farklı yerlerde ama aynı amaçla kullanılan, loglama, exception handling gibi sınıflardır.
- Advice : AOP yapısı içinde bir modele uygulanan CCC’lere ilişkin çözüm içeren yapıdır. Yukarıda örneklenen loglama ve exception handling gibi.
- Point Cut : Advice’ın uygulanacağı yerdir. Örneğin yukarıdaki yapıda, ilgili threadde methodun çalıştırılıp çıkıldığı noktada bir point-cut noktasıdır.
- Aspect : Point Cut ve Advice’ın oluşturduğu yapıya da Aspect denir.
- Waving: Waving ise CCC’leri varolan yapı içine derleyen işlemdir. Waving için farklı yaklaşımlar bulunuyor. Bunlar
- Compile time weaving: Bu tip waving, .net kodunun MSIL koduna çevrilmesinden hemen önce gerçekleşir. “Aspect Compiler” kodu derler ve native compiler’a yönlendirir. Net native olarak bunu desteklemiyor.
- Link time weaving: Burada ise, Aspect Compiler, .Net compiler’ın varolan kodu MSIL’e çevirmesinden sonra çalıştırılır.
- Run time weaving: Burada ise, ana kod ile aop kodları beraber derlenir. Bu .Net ortamında native olarak destekleniyor.
Filed under: gis | Leave a Comment
No Responses Yet to “AOP – 1”