Dependency Injection & GetIt İle Yukarılara Uçuş — Part 2

Dependency Injection Nedir ? GetIt Nasıl Kullanılır ?

Samet Çilingir
Flutter Students Club
3 min readMar 7, 2022

--

Herkese merhabalar! Ben Samet. Umarım gününüz güzel geçiyordur.

Bu yazı serisinde size bir projeye başlarken çok temelden ihtiyacınız olacak kolay ve efektif bir mimari yapıyı ve bu yapıyla beraber durum yönetiminin nasıl yapabileceğini göstereceğim.

Sırasıyla problemi analiz edip, bu problem doğrultusunda ihitiyaçlarımıza yönelik çözümleri kavrayıp bu çözümlerin koda dökülmesine kadar olan adımları beraber izleyeceğiz.

4 tane alt makale olarak izleyeceğimiz bu seride akla gelebilecek birçok soruyu yanıtlamaya çalışacağım. O zaman haydi başlayalım.

Alt Başlıklar

  • Part 1 — Design Pattern Nedir ? MVVM Nasıl Kullanılır ?
  • Part 2 — Dependency Injection Nedir ? GetIt Nasıl Kullanılır ?
  • Part 3 — State Management Nedir ? MobX Nasıl Kullanılır ?
  • Part 4 — Gelin Bir Örnek Yapalım.

İçerik

  • Problem Tanımı
  • Dependency Injection Kavramı
  • GetIt Kütüphanesi
  • Kaynakça
  • Kapanış

Problem Tanımı

Uygulamanın arka plan performansını etkili kullanmaya özen gösterilmedir. Sınıflar içinden başka bir sınıf çağırdığımızda her seferinde tekrardan nesne oluşturmaması ve çağırılana kadar hafızada yer işgal etmemesi sağlanmalıdır. Bu da dependency injection kütüphanesi kullanılarak gerçekleştiriliyor.

Ayrıca bu problemlere karşılık gelen çözümler birbirinden farklı olabilir veya hiçbir kütüphane kullanılmadan da üstesinden gelinebilir.

Dependency Injection Kavramı

Sınıflar, genellikle fonksiyonları ve metotları başka sınıflardan almaya ihtiyaç duyarlar. Bunu çözmenin en basit yolu o sınıftan yeni bir nesne oluşturmaktır. Asıl sorun farklı sınıflar arasından tek bir sınıfın içerisindekileri çekmek istediğimizde ortaya çıkar.

Dependency Injection, bir öğenin bağımlılıklarını başka bir nesne aracılığıyla erişilebilir kılmak için kullanılan bir tekniktir. Bu bağımlılıklara servisler denilebilir. Servisler (MobX Store gibi), projenizin farklı yerlerinde kullanılabilecek çeşitli fonksiyonlar içeren kod bloklarını tutarlar. Birçok durumda, sınıfları veya metodları kullanmak için dosyaları içe aktarmak gereklidir. Bu içe aktarmaları yapmak için kullanılan sınıfları onlara bağımlı hale getiririz. DI’nin sunduğu “servis bulucu” mantığı ile bu bağımlılıklar çözülebilir.

Dependency Injection bize ne sağlar;

  • Kodları daha sürdürülebilir bir şekilde ayırır.
  • Erişilebilirliği arttırır.
  • Test etmeyi kolaylaştırır.
  • Yeni özellikler eklemeyi daha kolay hale getirir.
  • Herhangi bir değişiklik yapıldığında, bunun başka bir nesnede beklenmeyen bir değişiklikler yaratma riskini azaltır (loose coupling).

Servisleri bir sınıfa constructor aracılığıyla iletmek uygulanan en temel yaklaşım olmasına rağmen kullanışlı değildir.

Bu yöntem ilk başta kötü görünmeyebilir ki o kadar kötü değildir zaten, ancak nesneleri widgetların derinlerine iletmek bir noktadan sonra oldukça problemli hale gelir.

GetIt Kütüphanesi

GetIt, servise herhangi bir yerden erişmenize olanak tanıyan bir hizmet bulucudur. Servisin yerini kaydederken singleton, lazy singleton ya da factory olarak tanımlamaya ve sınıflar arasından erişmeye olanak sağlar.

  • Singleton: Her zaman o servisin aynı örneğini oluşturur.
  • Lazy Singleton: Çağrıldığında ilk örnekteki nesneyi döndürür. Başlaması zaman alan ve ihtiyaç duyulduğunda oluşturulan bir servis olduğundan daha kullanışlıdır.
  • Factory: Her çağrıldığında servisin yeni bir örneğini oluşturur.

GetIt Kullanımı

Bunun için önce get_it kütüphanesini projemize dahil etmemiz gerekmektedir. Bu işlemden sonra aşağıdaki şekilde yeni bir dosya oluşturarak servislerin register edilmesi gerekmektedir.

Oluşturduğumuz setupLocator metodunun runApp çalışmadan önce çalışması gerekir.

Sınıfların içine aşağıda şekilde servisi enjekte ediyoruz. Artık servisimizi, hem diğer servislerin içinden hem de viewlar’ın içinden çekerek işlevlerini kullanabiliriz.

Kapanış

Yazının sonuna kadar geldiğimiz için çok teşekkürler. Umarım keyif almışsınızdır. Aşağıdaki kanallardan beni takip etmeyi ve destek olmayı unutmayın.

Twitter: https://twitter.com/sametcilingirrr

Linkedin: https://www.linkedin.com/in/sametcilingir/

Ve ayrıca…

When you help someone, you help everyone.

--

--