제이온

[Etkin Java] Madde 5. Kaynakları Belirlemeyin, Bağımlılık Enjeksiyonunu Kullanın

  • Yazım Dili: Korece
  • Baz Ülke: Tüm Ülkelercountry-flag
  • BT

Oluşturulma: 2024-04-28

Oluşturulma: 2024-04-28 13:39

Bir sınıf, içeriden bir veya daha fazla kaynağa bağımlıysa ve bu kaynaklar sınıfın davranışını etkiliyorsa, tekil (singleton) ve statik yardımcı sınıflar kullanılmamalıdır.


Bu kaynaklar sınıf tarafından doğrudan oluşturulmamalıdır; bunun yerine, gereken kaynaklar oluşturucuya aktarılmalıdır. Bağımlılık enjeksiyonu (dependency injection) yoluyla sınıfın esnekliği, yeniden kullanılabilirliği ve test edilebilirliği iyileştirilebilir.


Örnek

Statik Yardımcı Sınıf Kullanımına Örnek

Bu yardımcı sınıf, yalnızca bir sözlük kullanıldığını varsaymaktadır. Ancak gerçekte, sözlükler dile göre ayrılabilir ve hatta özel kelimeler için ayrı sözlükler kullanılabilir.


Tekil (Singleton) Sınıf Kullanımına Örnek


Tekil (Singleton) sınıflar da aynı şekilde yalnızca bir sözlük kullandığını varsaydıkları için yukarıdaki dezavantajlara sahiptir.


Çözüm 1 - Alanlardaki final Anahtar Kelimesi Kaldırılır.


Statik yardımcı sınıf veya tekil (singleton) sınıfın dictionary'si için final anahtar kelimesi kaldırılarak, dictionary'nin dışarıdan başka bir sözlükle değiştirilmesi sağlanabilir. Ancak bu yöntem kullanımı zor ve çok iş parçacıklı ortamlarda eşzamanlılık sorunlarına yol açabilir.


Çözüm 2 - Bağımlılık Enjeksiyonu Kullanılır.


Yukarıdaki örnekte, statik sınıflar ve tekil (singleton) sınıfların iç kaynaklara bağımlı olmaması gerektiği görülebilir. Yani iç kaynakların dışarıdan sağlanması daha iyidir.


Bağımlılık enjeksiyonu kullanılan sınıflar, final anahtar kelimesi sayesinde değişmezliği garanti edebilir ve birden fazla kaynak örneğini destekleyebilir. Ayrıca, bağımlılık enjeksiyonu yalnızca oluşturucularda değil, statik fabrika ve oluşturucu (builder) desenlerinde de kullanılabilir.


Bağımlılık enjeksiyonunda, kaynağın kendisinin aktarılması dışında, kaynak fabrikasının aktarılması da sıkça kullanılır. Fabrika, çağrıldığında belirli bir türde örnek oluşturan bir nesnedir. Bu yönteme fabrika yöntemi deseni denir ve Java 8'de Supplier<T> bu fabrikayı temsil eden mükemmel bir örnektir.



Genellikle, fabrikaya ait tür parametresini sınırlamak için sınırlı joker karakter türü kullanılır. Bu sayede istemci, belirttiği türün alt türü olan herhangi bir fabrikayı geçebilir.


Bağımlılık enjeksiyonu esneklik ve test edilebilirliği iyileştirir, ancak çok fazla bağımlılığın olduğu projelerde maliyetli olabilir. Bu gibi durumlarda, Dagger, Guice, Spring gibi bağımlılık enjeksiyonu çerçeveleri kullanılarak maliyet azaltılabilir.


Kaynaklar

Yorumlar0