Yazılım Geliştirme Trendleri 2017/6 DI & IoC Container

Mustafa Ekim
2 min readAug 12, 2017

--

Artık tüm düzgün projelerin merkezinde Inversion of Control Container’lar yer alıyor. Bunun da çok temel bir nedeni var: Dependency Injection, uygulamanın farklı bölümlerinin, birbirinin varlığından haberdar olmadan birlikte çalışabilmesini sağlıyor. Bu da bütünü, birbirine bağımlılığı çok düşük (loosely coupled) parçalara ayırabilmek, yani daha modüler bir çözüm geliştirebilmek demek.

Daha modüler yazılım geliştirme, yani bütünü parçalara ayırma ve parçaların birbirleri arasındaki iletişimi interface/API’ler aracılığıyla gerçekleştirmesi (program to interfaces, not implementations) iyi bir yazılımcının zaten uygulaması gereken bir design pattern’di. Ancak artık bunun bir zorunluluk haline geldiğini görüyorum.

Eskisine kıyasla bir uygulama, dış servislerle çok daha fazla işbirliği içinde. Uygulamamız bizim geliştirdiğimiz modüller kadar, başkalarının geliştirdiği modüllerle de etkileşim içinde. Eposta göndermek, finansal işlem yapmak, REST kaynaklardan veri çekilmesi, sosyal medya hesapları ve diğer uygulamalar ile entegrasyonlar derken, artık projemizin tüm bu taraflarla olan iletişimi verimli ve doğru bir biçimde yönetmesi gerek.

Bir örnek verelim. İnternet üzerinden dijital ürün satan bir e-ticaret siteniz var. Müşteri bir ürün satın aldı, sizin uygulamanız da bu ürünü e-posta ile müşteriye gönderecek. Ancak e-posta hizmeti aldığınız servis sağlayıcı bir sürelik servis dışı kalmış. Yapmanız gereken hemen sıradaki e-posta hizmeti veren servis sağlayıcı ile e-posta göndermini gerçekleştirmek. Bu arada uygulamanızdaki varsayılan e-posta servis sağlayıcısı da güncellenmeli ki tüm diğer e-posta gönderim süreçleriniz de aynı süreci yaşamasın.

Bu yapıyı elde edebilmek için, öncelikle bir EmailProvider interface’ine, sonra her bir e-posta hizmeti veren servis sağlayıcı için bu interface’in özel implementasyonuna, sonra bu implementasyonların Inversion of Control Container’a array olarak enjekte edilmesi gerekir. Yazılım modülleriniz de bu array’deki ilk elemanı kullanır. Eğer sorun yaşıyor ise, array’deki sıralamayı değiştirir yeniden denersiniz. Böylece ilk sorun yaşayan, sıralamayı değiştireceği için, tüm diğer modüller e-posta gönderiminde aksaklık yaşamaz.

Uygulamanız toplamda 20 dış servis ile etkileşim halindeyse, tüm bu servislerin backup planlarını yapmalısınız. Her bir servisin hizmet dışı kalması, sizin de hizmet dışı kalmanız anlamına gelirse, Single Point of Failure’a ortam hazırlarsınız.

A single point of failure (SPOF) is a part of a system that, if it fails, will stop the entire system from working.

Inversion of Control Container kullanmak, sizin bazı modüllerdeki güncellemeleri de yavaş/yavaş, deneye/deneye yapabilmenizi sağlar. Yeni geliştirilen servisleri kısa süreli deneyebilir, istediğiniz sonuçları elde edince tüm sistemde kullanıma sokabilirsiniz.

**

Eğer sıfırdan yazılım kariyerine başlamak istiyorsanız, 3 aylık yoğun programlar düzenliyorum. Bilgi için: https://www.yenikodyazilimkursu.com/

Test Invite online sınav sistemi ile tanışın: İşe alım sınavları, Genel Yetenek Testleri ve İngilizce Seviye Tespit Testleri

Video kayıtlı ve zorunlu tam ekran ile güvenli online sınavlar yapmak için: https://www.testinvite.com/lang/tr/online-sinav-sistemi.html

--

--

Mustafa Ekim

Software Developer & Trainer. Entrepreneur & Founder of TestInvite Exam Software — https://www.testinvite.com