İçeriğe geç

KingAOP – (Alternative of PostSharp)

AOP(Aspect Oriented Programming) için genel anlamda birbirleri ile kesişen iş parçacıkları arasındaki karmaşaya çözüm getiren yapıdır diyebiliriz. Bu noktada OOP’da (Object Oriented Programming) çözüm olarak kullanılabilir. Fakat AOP konusunu, daha çok çalışma zamanı noktasında karşılaşabileceğimiz durumlar için düşünmemiz gereklidir. Örnek olarak bu durum için çalışma zamanında bir nesnenin property değişikliğini düşünebiliriz. AOP konusunda detaylı bilgi edinmek için şuradaki makaleyi incelemekte yarar var.

KingAOP

AOP için halihazırda ücretli bir ürün bulunmakta ve adı postsharp‘dır. PostSharp size kendi attribute’nizi yazabilmeniz için bir Base Attribute sunar ve bunu kullanarak ihtiyaç dahilinde kesişen iş parçacıklarımıza daha etkin çözüm bulabiliriz. AOP yaklaşımına uygun ve ücretsiz bir ürün olan KingAOP, PostSharp’ın alternatifi olarak kullanılabilir. KingAOP açık kaynaktır ve kullanımına ilişkin basit bir console uygulamasını aşağıdaki gibi inceleyebiliriz.

class HelloWorldAspect : OnMethodBoundaryAspect
    {
        public override void OnEntry(MethodExecutionArgs args)
        {
            Console.WriteLine("OnEntry: Hello KingAOP");
        }

        public override void OnSuccess(MethodExecutionArgs args)
        {
            Console.WriteLine("OnSuccess: Hello KingAOP");
        }

        public override void OnExit(MethodExecutionArgs args)
        {
            Console.WriteLine("OnExit: Hello KingAOP");
        }
    }

Hazırladığımız bu class’ı metodumuzun üstünde attribute olarak kullanabiliriz.

    internal class HelloWorld : IDynamicMetaObjectProvider
    {
        [HelloWorldAspect]
        public void HelloWorldCall()
        {
            Console.WriteLine("Hello World");
        }

        public DynamicMetaObject GetMetaObject(Expression parameter)
        {
            return new AspectWeaver(parameter, this);
        }
    }

Son olarak metodu kullanacağımız yerde dynamic olarak instant oluşturmalıyız.

            dynamic helloWorld = new HelloWorld.HelloWorld();
            helloWorld.HelloWorldCall();

Ekran çıktısına baktığımızda aşağıdaki görüntüyü elde ediyor olacağız.

Tarih:Aspect Oriented

İlk Yorumu Siz Yapın

Bir cevap yazın

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

This site uses Akismet to reduce spam. Learn how your comment data is processed.