Inversion of Control Örnek

  1. Eslem78
    16
    815
    4.03.2019 13:45:00

    Inversion of Control için bir örnek verebilir misiniz , aşağıdaki linkte IOC hakkında ;

    "uygulama sınıfları arasında gevşek bir bağlantı sağlamak için , farklı kontrol türlerinin ters çevrilmesini önerir"

    demişsiniz , ancak ben anlayamadım tam olarak. Bir örnek uygulama ile açıklayabilir misiniz ?

    https://code.replyfeed.com/sorular/4865/ioc-dip-di-ioc-container

    ioc 2 yıl önce 1183 Görüntüleme

( 1 ) Cevap

  1. askinglr34
    16
    2929
    4.03.2019 15:12:00

    ioc inversion of control

    Şimdi öncelikle bağlantı / bağılımlılık kavramını anlayalım , bir sınıf nasıl bir sınıfa bağımlı olabiliyor ona bakalım ;

    Örneğin Taksi ve Şöför sınıflarına bakalım ;

        public class Taksi
    {
        Sofor s;
        public Taksi()
        {
            s = new Sofor();
        }
        public void YolcuTasi()
        {
            // taksinin kapisini ac
           //takside mazot varmı kontrol et
            s.TaksiKullan();
            // parayı al
        }
    }
    public class Sofor
    {
        public void TaksiKullan()
        {
            //taksi kullanılıyor
        }
    }
    

    Yukarda gördüğümüz üzere , Taksi sınıfı , YolcuTasi() islemini , metodunu tamamlayabilmesi için , Sofor sınıfına ihtiyacı var , yani şöför olmadan , yolcu taşıma işlemi tamamlanamıyor.

    Bu demek oluyor ki , Taksi Sınıfı Sofor sınıfına bağımlı , bağlı . Bir başka deyişle `Sofor' sınıfı 'Taksi' sınıfının bağımlılık sınıfı , olmazsa olmazı.

    Bizde kendi Nesne Yönelimli Programlama projelerimize baktığımızda , yukarıdaki senaryoya oldukça rastlamışızdır.Bir sınıfımız , kendisinden başka bir sınıfın nesneseni oluşturur , yönetir , dispose eder vb...

    Bir nevi , bağımlı olduğu sınıfının nesnesinin oluşturulmasını , yaşam sürelerini kontrol eder. Yukarıdaki örneğe bakarsak , Taksi sınıfı aynı zamanda Şofor sınıfının nesnesini de oluşturur , kontrol eder.

    İşte bu noktada IoC prensibi kontrolü tersine çevirmeyi tavsiye eder. Kontrol işlemini başka bir sınıfa devredilmesi gerektiğini söyler.

    Örnek üzerinden gidecek olursak , Sofor sınıfına olan bağımlılığın kontrolünü , Taksi sınıfı tarafından yapılması değilde , başka bir sınıf tarafından yapılmasıdır. Yani bağımlılık oluşturma kontrolünü Taksi sınıfından başka bir sınıfa ters çevirmektir.

    Aynen aşağıdaki gibi

    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
        }
    }
    

    Şimdi gördüğünüz üzere , Taksi sınıfının bağımlı olduğu Sofor sınıfını oluşturma işini , Taksi sınıfından , Factory sınıfına ters çevirdik.

    • Eslem78 hmm anladım şimdi , bu sayede ,Taksi ve Sofor sınıfları arasında gevşek bir bağlılık yani loose coupled sağlanmış oluyor

    • askinglr34 yani , hemen hemen , aslında sacede IoC prensibi ile tam bir gevşek bağlı sınıflar yapamayız , Ioc ile birlikte DIP (Dependency Inversion Principle) , DI (Dependency Injection) Pattern ve IoC container da kullanılmalıdır.

    • Eslem78 anlıyorum , bugün ioc container için de bir örnek rica edeceğim zaten :)

    • Yorum Ekleyin

Cevabınız