Dependency Inversion Örnek

  1. Eslem78
    5
    815
    27.02.2019 09:39:00

    Solid prensiplerinden olan Dependency Inversion Prensibine bir örnek uygulama verebilir misiniz ? Bir örnek üzerinden dahada açıklayabilir misiniz , aşağıdaki yazıyı okudum fakat ,Dependency Inversion Prensibini tam anlayamadım

    https://code.replyfeed.com/sorular/3672/solid-prensipleri-nedir-nelerdir

    diğer ioc 2 yıl önce 1613 Görüntüleme

( 1 ) Cevap

  1. askinglr34
    4
    2929
    12.03.2019 12:28:00

    inversion of control dependency inversion

    Dependency Inversion :

    1) Yüksek seviye modüller/sınıflar , düşük seviye modüllere/sınıflara bağımlı olmamalıdır.Her iki seviye de , abstraction dediğimiz soyutlamaya bağlı olmalıdır.

    2) Abstraction ise detaylara bağlı olmamalı , aksine detaylar abstraction a bağımlı olmalıdır.

    Şimdi ben daha önce Inversion Of Control Örnek (https://code.replyfeed.com/sorular/4903/inversion-of-control-ornek) başlığı altında , sıkı bağlı iki sınıfı , biraz gevşetmek için Factory pattern kullanarak IOC prensibini uygulamıştık.

    Her ne kadar bağımlı olan nesnenin üretimini factorye bıraksakda , hala sınıflar birbirine sıkı sıkı bağlı. Şimdi buradaki Taksi , Şofor örneğimizi , Dependency Inversion prensibi ile biraz daha gevşek bağlı yapalım.

    Şimdi, Inversion Of Control örneğini hatırlayacak olursak ;

    public class Taksi
    {
        Sofor s;
        public Taksi()
        {
            s = Factory.GetObjectOfSofor();
        }
        public void YolcuTasi()
        {
            // taksinin kapisini ac
            s.TaksiKullan();
            // parayı al
        }
    }
    //object üretim sınıfı
    public class Factory
    {
        public static Sofor GetObjectOfSofor()
        {
            return new Sofor();
        }
    }
    public class Sofor
    {
        public void TaksiKullan()
        {
            //taksi kullanılıyor
        }
    }
    

    Yukarıdaki örnekte factory patterni kullanarak IOC prensibini uyguladık. Ancak hala Taksi ve Şöför birbirine sıkı sıkı bağlı , taksi sınıfında elle tutulur somut bir Sofor sınıfı var.

    Şimdi Dependency Inversion prensibi ile bu iki sınıfı biraz daha gevşek bağlı yapacağız.

    Yukardaki örneğimizde Yüksek seviye modül , Taksi sınıfı , çünkü Yüksek seviye modül, diğer modüllere bağlı bir modüldür. Alt seviye modülde Sofor sınıfı.

    Prensibimizi hatırlayacak olursak , Yüksek seviye modüller/sınıflar , düşük seviye modüllere/sınıflara bağımlı olmamalıdır.Her iki seviye de , abstraction dediğimiz soyutlamaya bağlı olmalıdır.

    Peki abstraction nedir , ingilizcede abstraction non-concrete , yani somut olmayan , elle tutulmayan dır. Tam tesi olan concrete somut , elle tutulur demektir. Taksi ve Sofor sınıfları concrete dir.

    Şimdi örnek üzerinde Dependency Inversion prensibini gerçekleyelim ve abstraction ınıda görelim.

        public interface ISofor
    {
        void TaksiKullan();
    }
    public class Sofor: ISofor
    {
        public Sofor()
        {
        }
        public void TaksiKullan() 
        {
            //taksi kullanılıyor , düt düt       
        }
    }
    public class SoforFactory
    {
        public static ISofor GetSoforObject() 
        {
            return new Sofor();
        }
    }
    public class Taksi
    {
        ISofor _sofor;
        public Taksi()
        {
            _sofor = SoforFactory.GetSoforObject();
        }
        public void YolcuTasi()
        {
            // taksinin kapisini ac
            _sofor.TaksiKullan();
            // parayı al
        }
    }
    

    Evet , artık Dependency Inversion prensibine uyduk, artık yüksek seviye Taksi sınıfı ve düşük seviye Sofor sınıfı biraz daha gevşek bağlı , çünkü artık Taksi sınıfında Sofor sınıfının concrete ( somut ) bir hali yok.Onun yerine ISofor interfaceinin referansı var , bu sayede her iki seviyede soyutluğa bağımlı.aynı zamanda soyut olan ISofor detaylara bağlı değil , detaylar soyutlamaya yani ISofor e bağlı.

Cevabınız