Dependency Inversion Prensibi Nedir

Üst seviye bir sınıf alt seviye bir sınıfa bağlı olursa, alt seviye sınıfta değişiklik olduğu zaman üst seviye sınıf etkilemektedir.

Nesne yönelimli tasarımda SOLID prensiplerin D prensibi olan Dependency Inversion (Bağlılığı Tersine Çevirme), interface kullanarak alt seviye bir sınıfın üst seviye bir sınıfı etkilemesi engellenir.

Processor üst seviye sınıftır.

SMS ve Mail alt seviye sınıflardır.

    class Processor
    {
        SMS sms;
        Mail mail;
        public Processor()
        {
            sms = new SMS();
            mail = new Mail();
        }
        public void Process()
        {
            sms.Send();
            mail.Send();
        }
    }
    class SMS
    {
        public void Send()
        {
            Console.WriteLine("Send SMS...");
        }
    }
    class Mail
    {
        public void Send()
        {
            Console.WriteLine("Send Mail...");
        }
    }

(reusability (Tekrar kullanılabilirlik) kodlama için) Bu örneğimizde engeli kaldırmak için interface kullanıyoruz.

    interface ISender
    {
        void Send();
    }

ISender arayüzü(interface) SMS ve Mail alt sınıflarına implement edilir.

    class SMS : ISender
    {
        public void Send()
        {
            Console.WriteLine("Send SMS...");
        }
    }
    class Mail : ISender
    {
        public void Send()
        {
            Console.WriteLine("Send Mail...");
        }
    }

Processor sınıfı ISender arayüzüne(interface) bağlanır. ISender arayüzüden implement edilen Mail ve SMS sınıfları Processor sınıfını kullanabilirler.
Artık Processor üst sınıfı, SMS ve Mail alt sınıflarına bağlı değildir!

    class Processor
    {
        ISender sender;
        public Processor(ISender _sender)
        {
            sender = _sender;
        }
        public void Process()
        {
            sender.Send();
        }
    }

Processor sınıfı aşağıda verilen örnekteki gibi çağrılabilir.

    class Program
    {
        static void Main(string[] args)
        {
            ISender sender = new Mail();
            Processor p = new Processor(sender);
            p.Process();
            Console.ReadKey();
        }
    }

Kodumuzun Son Hali :

using System;

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            ISender sender = new Mail();

            Processor p = new Processor(sender);
            p.Process();
            Console.ReadKey();
        }
    }

    class Processor
    {
        ISender sender;
        public Processor(ISender _sender)
        {
            sender = _sender;
        }
        public void Process()
        {
            sender.Send();
        }
    }
    class SMS : ISender
    {
        public void Send()
        {
            Console.WriteLine("Send SMS...");
        }
    }
    class Mail : ISender
    {
        public void Send()
        {
            Console.WriteLine("Send Mail...");
        }
    }
    interface ISender
    {
        void Send();
    }
}

Çıktısı :

dependency inversion c# kullanımı

Bir cevap yazın

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