Developersland

Teknoloji ve Yazılım Blogu

  • Yazıtipi boyutunu arttır
  • Varsayılan yazıtipi boyutu
  • Yazıtipi boyutunu azaltır

Inversion of Control (IoC) nedir ?

IoC bazıları tarafından Dependency Injection'la (DI) aioc_ynıymış gibi yorumlanması biraz yalnış, çünkü IoC DI'dan daha geniş bir konudur. Adından da göründüğü gibi bu yöntem control'u bizden alarak framework'a veriyor ve bu yolla işimizi çok çok kolaylaştırmış oluyor. Mesela biz artık database'le baglantılı bir uygulama geliştirdiğimiz sırada database configuration ayrıntılarına takılmak zorunda kalmıyoruz ve bu işi frameworka yaptırabiliyoruz. Bu özellikler sırasına component dependency, lifecycle event gibi çoğu uygulamada uzun uzun kod yazmamızı gerektiren kısımlar da dahil. Ve aynı zamanda IoC,  Robert C. Martin'in kitabında ("The Dependency Inversion Principle", 1994) belirttiği "bad code" örneğini oluşturan temel RFI (Rigidity + Fragility + Immobility) sıkıntısından da bizi kurtarmış oluyor.

Şimdi de IoC'u daha iyi anlamak adına birkaç örnek göstereceğim ve en son daha iyi anladıktan sonra özellikleri üzerinde biraz daha duracağım. Şöyle bir kod örneği düşünelim:

public class Report {
    private MyProject projectInfos;
    public Report() {
        projectInfos = new MyProject();
    }
}

Bu kod örneğinde Report sınfı ihtiyacı olduğu MyProject sınfının nesnesini class içesisinde new MyProject() diyerek oluşturdu, yani Report sınfı MyProject sınfına bağlı. Ki programlamada bu hiç de iyi birşey değildir.


Ama IoC mantığını kullanırsak Dependency Injection yoluyla aşağıdakı kodu yazabiliriz ve bu bağımsız bir kod olacaktır:


public class Report {   
  private MyProjectInterface projectInfos;
  public setMyProject (MyProjectInterface projectInfos) {
        this.projectInfos= projectInfos;
 }
  public Report () {
     //some code here
  }
}


Kodumuzu inceleyelim, artık MyProjectInterface interface'ine uyan herhangi bir implemention sonucu yarattığımız MyProject nesnesi Report sınfımız tarafından kullanılabilir ve bu durumda MyProjectin bundan haberi olmaz.

Aslında setMyProject methodunu cağıran burada IoC'dur. Artık yazacağımız kodların bir kısmını biz yapıyorsak diğer kolaylaştırıcı arka kısmını da IoC yapıyordur. (dependency injection gibi).



DI şeklimiz:

                                                                                injection

B nesnesi OR C nesnesi OR herhangi başka nesne ------------------> A nesnesi


 

Yorum ekle


Güvenlik kodu
Yenile