Try using it in your preferred language.

English

  • English
  • 汉语
  • Español
  • Bahasa Indonesia
  • Português
  • Русский
  • 日本語
  • 한국어
  • Deutsch
  • Français
  • Italiano
  • Türkçe
  • Tiếng Việt
  • ไทย
  • Polski
  • Nederlands
  • हिन्दी
  • Magyar

Çıkış Yap

translation

Bu, AI tarafından çevrilen bir gönderidir.

제이온

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

  • tr Writing language: Korece
  • tr Referans Ülke: tr Tüm ülkeler country-flag

Dil Seç

  • Türkçe
  • English
  • 汉语
  • Español
  • Bahasa Indonesia
  • Português
  • Русский
  • 日本語
  • 한국어
  • Deutsch
  • Français
  • Italiano
  • Tiếng Việt
  • ไทย
  • Polski
  • Nederlands
  • हिन्दी
  • Magyar

Text summarized by durumis AI

  • Bir sınıfın içsel olarak bir veya daha fazla kaynağa bağımlılığı varsa, statik yardımcı sınıflar ve singleton sınıflar kullanılmamalıdır, bağımlılık enjeksiyonu kullanılması tercih edilir.
  • Bağımlılık enjeksiyonu, sınıfın esnekliğini, yeniden kullanılabilirliğini ve test edilebilirliğini iyileştirmeye yardımcı olabilir; kaynaklar, oluşturucular, statik fabrikalar, oluşturucular vb. aracılığıyla enjekte edilebilir.
  • Bağımlılık enjeksiyonu, kaynağın kendisinin veya kaynak fabrikasının verilmesi şeklinde kullanılabilir; bağımlılıkların yoğun olduğu projelere, bağımlılık enjeksiyon çerçevesini kullanmak daha verimli olabilir.

Eğer bir sınıf içsel olarak birden fazla kaynağa bağımlıysa ve bu kaynaklar sınıf davranışını etkiliyorsa, tekil 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, gerekli kaynaklar oluşturucuya aktarılmalıdır. Bağımlılık enjeksiyonu yoluyla sınıfın esnekliğini, yeniden kullanılabilirliğini ve test edilebilirliğini artırabilirsiniz.


Örnek

Statik yardımcı sınıf kullanarak örnek

public class SpellChecker {

    private static final Lexicon dictionary = new Lexicon();

    private SpellChecker() {
    }

    public static boolean isValid(String word) {
        // dictionary'yi kullanan mantık
    }

    public static List suggestions(String typo) {
        // dictionary'yi kullanan mantık
    }

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


Tekil sınıf kullanarak örnek

public class SpellChecker {

    private final Lexicon dictionary = new Lexicon();

    public static SpellChecker INSTANCE = new SpellChecker();

    private SpellChecker() {
    }

    public static boolean isValid(String word) {
        // dictionary'yi kullanan mantık
    }

    public static List suggestions(String typo) {
        // dictionary'yi kullanan mantık
    }


Tekil sınıf da yalnızca bir sözlüğün kullanıldığını varsayar, bu nedenle yukarıdaki dezavantaj ortaya çıkar.


Çözüm 1 - Alanlarındaki final anahtar sözcüğünü kaldırın.

public class SpellChecker {

    private Lexicon dictionary = new Lexicon();

    public static SpellChecker INSTANCE = new SpellChecker();

    private SpellChecker() {
    }

    public static void changeDictionary(Lexicon dictionary) {
        this.dictionary = dictionary;
    }

    public static boolean isValid(String word) {
        // dictionary'yi kullanan mantık
    }

    public static List suggestions(String typo) {
        // dictionary'yi kullanan mantık
    }


Statik yardımcı sınıfın veya tekil sınıfın dictionary'sindeki final anahtar sözcüğünü kaldırabilir ve dictionary'yi dışarıdan farklı bir sözlükle değiştirebilecek şekilde tasarlayabilirsiniz. Ancak bu yöntem kullanımı zor olabilir ve çoklu iş parçacıklı ortamlarda eşzamanlı sorunlara yol açabilir.


Çözüm 2 - Bağımlılık enjeksiyonu kullanın.

public class SpellChecker {

    private final Lexicon dictionary;

    public SpellChecker(Lexicon dictionary) {
        this.dictionary = dictionary;
    }

    public static boolean isValid(String word) {
        // dictionary'yi kullanan mantık
    }

    public static List suggestions(String typo) {
        // dictionary'yi kullanan mantık
    }


Yukarıdaki örnekte, statik sınıfların ve tekil sınıfların içsel olarak kaynağa bağlı olmaması gerektiği görülebilir. Yani içsel kaynaklar dışarıdan enjekte edilmelidir.


Bağımlılık enjeksiyonu kullanılan sınıflar, final anahtar sözcüğü sayesinde değişmezliği garanti edebilir ve birden fazla kaynak örneğini destekler. Ayrıca bağımlılık enjeksiyonu, oluşturucuya ek olarak, statik fabrika ve oluşturucuda da uygulanabilir.


Bağımlılık enjeksiyonu, basitçe kaynağın kendisinin geçirildiği bir yöntemdir, ancak kaynak fabrikasının geçirildiği yöntem de sıklıkla kullanılır. Fabrika, çağrıldığında belirli bir türden örnekleri tekrar tekrar oluşturabilen bir nesnedir. Bu yönteme fabrika yöntemi deseni denir ve Java 8'de Supplier, fabrikayı temsil eden mükemmel bir örnektir.


public static List create(Supplier generator) {
    ...


Genellikle fabrikadaki tür parametresini sınırlamak için sınırlı joker karakter türü kullanılır. Bu yöntemi kullanarak, istemci, belirttiği türün alt türlerinden herhangi birini fabrikaya geçirebilir.


Bağımlılık enjeksiyonu esnekliği ve test edilebilirliği artırır, ancak çok sayıda bağımlılığa sahip projelerde önemli maliyetlere yol açabilir. Bu durumlarda, maliyeti azaltmak için bağımlılık enjeksiyon çerçeveleri (Dagger, Guice, Spring vb.) kullanılabilir.


Kaynak

제이온
제이온
제이온
제이온
[Etkin Java] Öğe 4. Oluşturulmayı Engellemek İçin Özel Bir Oluşturucu Kullanın Sadece statik yöntemler ve alanlar içeren yardımcı sınıflar için, oluşturulmayı engellemek amacıyla oluşturucunun erişim belirtecini özel olarak ayarlanması önerilir. Bu, kullanıcıların oluşturucunun otomatik olarak oluşturulduğunu düşünmesini önler, kalı

28 Nisan 2024

[Efektif Java] Öğe 3. Özel Oluşturucular veya Sayım Türüyle Tekil Olmayı Garanti Etme Java'da tekil kalıbını uygulamanın üç yolunu (public static üye, statik fabrika yöntemi, sayım türü) tanıtır ve her yöntemin avantajlarını ve dezavantajlarını ve seri hale getirme sırasında dikkat edilmesi gereken noktaları açıklar. Yansıma saldırılarına

27 Nisan 2024

[Java] Yansıma Kavramı ve Kullanım Şekli Yansıma, Java programları çalışırken sınıf bilgilerine erişerek sınıfları manipüle etmeyi sağlayan bir API'dir. Çalışma zamanında sınıflar oluşturulmasını ve alanlara ve yöntemlere erişmeyi sağlar, ancak kapsüllemeyi ihlal edebilir ve performans düşüşüne

25 Nisan 2024

Kavramsal Veri Modellemesi Kavramsal veri modelleme, varlıkları ayırma ve varlıklar arasındaki ilişkileri ERD ile gösterme sürecidir. Varlıklar bağımsız bilgi birimleridir ve öznitelikler, varlığın sahip olduğu verilerdir. Tanımlayıcılar, varlıkları benzersiz bir şekilde tanımlar v
제이의 블로그
제이의 블로그
제이의 블로그
제이의 블로그

8 Nisan 2024

Rust'ın Eşzamanlılık Hatalarını Önleme Yolu Rust, eşzamanlı programlamanın zorluklarını aşmak için güçlü bir dildir. Tip sistemi ve sahiplik modeli sayesinde, iş parçacıkları arasında veri aktarımı ve paylaşımı güvenlidir. Mutex, Channel, Atomic gibi iç değişkenlik kalıpları ile paylaşılan değişken
곽경직
곽경직
곽경직
곽경직
곽경직

28 Mart 2024

Mantıksal Veri Modelleme Mantıksal veri modelleme, kavramsal veri modellemeyi ilişkisel veritabanı paradigmasına göre dönüştürme sürecidir, 1:1, 1:N, N:M ilişkileri işler ve normalleştirme yoluyla veri bütünlüğünü sağlar. 1NF, 2NF, 3NF'den geçerek tabloları rafine eder ve kısmi b
제이의 블로그
제이의 블로그
제이의 블로그
제이의 블로그
제이의 블로그

9 Nisan 2024

Yatırımın Neden Olasılıksal Bir Düşünce Biçimiyle Yaklaşılması Gerekir: Yatırım Sonuçlarının Kesin Nedenini Asla Bilemezsiniz Yatırım sonuçları, beceriye ek olarak şansa da büyük ölçüde bağlıdır ve kesin nedeni belirlemek imkansızdır. Bu nedenle yatırım, olasılıksal bir düşünce biçimiyle ele alınmalı, avantajlı durumlarda mümkün olduğunca savaşılmalı ve dezavantajlı durumlarda i
고집스런가치투자
고집스런가치투자
고집스런가치투자
고집스런가치투자

3 Nisan 2024

[SI Geliştirici Hikayesi] 12. SI Projelerinde Sık Kullanılan Teknoloji Yığını Güney Kore'deki SI geliştiricileri, genellikle Java tabanlı Spring, Oracle DB, Mybatis, JSP, JavaScript, HTML, CSS gibi teknoloji yığınlarını kullanarak verimli ve istikrarlı BT sistemleri geliştirir ve Eclipse'i geliştirme ortamı olarak kullanırlar. Bu t
투잡뛰는 개발 노동자
투잡뛰는 개발 노동자
투잡뛰는 개발 노동자
투잡뛰는 개발 노동자

19 Nisan 2024

[Javascript] Nesne Yapısı (V8) JavaScript'teki Nesne, V8 motorunda durumuna göre yapı gibi optimize edilmiş Hızlı mod ve karma tablo olarak çalışan Sözlük moduna dönüştürülür. Hızlı mod, anahtar ve değerlerin neredeyse sabit olduğu bir biçimde hızlıdır ancak yeni bir anahtar eklendiğin
곽경직
곽경직
곽경직
곽경직
곽경직

18 Mart 2024