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
translation

Ini adalah postingan yang diterjemahkan oleh AI.

제이온

[Efektif Java] Item 5. Gunakan Injeksi Ketergantungan, Bukan Menentukan Sumber Daya

  • Bahasa penulisan: Bahasa Korea
  • Negara referensi: Semua negara country-flag

Pilih Bahasa

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

Teks yang dirangkum oleh AI durumis

  • Jika kelas bergantung pada satu atau lebih sumber daya secara internal, sebaiknya jangan gunakan kelas utilitas statis dan kelas singleton, dan lebih baik menggunakan injeksi ketergantungan.
  • Menggunakan injeksi ketergantungan dapat meningkatkan fleksibilitas, kemampuan penggunaan kembali, dan kemampuan pengujian kelas, dan sumber daya dapat disuntikkan melalui konstruktor, pabrik statis, builder, dll.
  • Injeksi ketergantungan dapat digunakan dengan meneruskan sumber daya itu sendiri atau pabrik sumber daya, dan dalam proyek dengan banyak dependensi, menggunakan kerangka kerja ketergantungan lebih efisien.

Jika kelas secara internal bergantung pada satu atau lebih sumber daya, dan sumber daya tersebut memengaruhi operasi kelas, maka singleton dan kelas utilitas statis sebaiknya tidak digunakan.


Sumber daya ini tidak boleh dibuat langsung oleh kelas, melainkan di-passing ke konstruktor. Injeksi dependensi dapat digunakan untuk meningkatkan fleksibilitas, kemampuan penggunaan kembali, dan kemudahan pengujian kelas.


Contoh

Contoh Penggunaan Kelas Utilitas Statis

public class SpellChecker {

    private static final Lexicon dictionary = new Lexicon();

    private SpellChecker() {
    }

    public static boolean isValid(String word) {
        // logika yang menggunakan dictionary
    }

    public static List suggestions(String typo) {
        // logika yang menggunakan dictionary
    }

Kelas utilitas ini mengasumsikan bahwa hanya satu kamus yang digunakan. Namun, dalam praktiknya, kamus mungkin berbeda untuk setiap bahasa, dan bahkan mungkin ada kamus khusus untuk kosa kata khusus.


Contoh Penggunaan Kelas Singleton

public class SpellChecker {

    private final Lexicon dictionary = new Lexicon();

    public static SpellChecker INSTANCE = new SpellChecker();

    private SpellChecker() {
    }

    public static boolean isValid(String word) {
        // logika yang menggunakan dictionary
    }

    public static List suggestions(String typo) {
        // logika yang menggunakan dictionary
    }


Kelas singleton juga mengasumsikan bahwa hanya satu kamus yang digunakan, sehingga menimbulkan kelemahan yang sama seperti di atas.


Solusi 1 - Hapus Kata Kunci Final dari Bidang

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) {
        // logika yang menggunakan dictionary
    }

    public static List suggestions(String typo) {
        // logika yang menggunakan dictionary
    }


Kata kunci final dapat dihapus dari kamus kelas utilitas statis atau singleton, dan kelas dapat dirancang untuk memungkinkan penggantian kamus dari luar. Namun, pendekatan ini canggung untuk digunakan dan dapat menyebabkan masalah sinkronisasi dalam lingkungan multi-threaded.


Solusi 2 - Gunakan Injeksi Dependensi

public class SpellChecker {

    private final Lexicon dictionary;

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

    public static boolean isValid(String word) {
        // logika yang menggunakan dictionary
    }

    public static List suggestions(String typo) {
        // logika yang menggunakan dictionary
    }


Dari contoh di atas, kita dapat melihat bahwa kelas statis dan singleton tidak boleh bergantung pada sumber daya internal. Artinya, sumber daya internal harus diinjeksikan dari luar.


Kelas yang menggunakan injeksi dependensi memiliki keuntungan karena dapat memastikan kekekalan berkat kata kunci final, dan mendukung beberapa instans sumber daya. Selain itu, injeksi dependensi dapat diterapkan tidak hanya dalam konstruktor, tetapi juga dalam pabrik statis dan builder.


Injeksi dependensi tidak hanya dapat meneruskan sumber daya itu sendiri, tetapi juga sering menggunakan pabrik. Pabrik adalah objek yang dapat membuat instans dari tipe tertentu secara berulang saat dipanggil. Pendekatan ini disebut pola pabrik metode, dan Supplier di Java 8 adalah contoh sempurna dari representasi pabrik.


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


Kartu wildcard terbatas biasanya digunakan untuk membatasi parameter tipe pabrik. Dengan menggunakan pendekatan ini, klien dapat meneruskan pabrik mana pun selama itu adalah subtipe dari tipe yang mereka tentukan.


Injeksi dependensi meningkatkan fleksibilitas dan kemudahan pengujian, tetapi bisa sangat mahal untuk proyek dengan banyak dependensi. Dalam kasus ini, kerangka kerja injeksi dependensi (Dagger, Guice, Spring, dll.) dapat digunakan untuk mengurangi biaya.


Sumber

제이온
제이온
제이온
제이온
[Efektif Java] Item 4. Gunakan konstruktor pribadi untuk mencegah instansiasi Kelas utilitas yang hanya berisi metode statis dan bidang sebaiknya mengatur pengontrol akses konstruktornya menjadi pribadi untuk mencegah instansiasi. Hal ini untuk mencegah pengguna menganggap konstruktor dibuat secara otomatis, dan untuk membuat kelas

28 April 2024

[Efektif Java] Item 3. Jamin Singleton dengan Konstruktor Pribadi atau Tipe Enum Artikel ini memperkenalkan tiga cara untuk mengimplementasikan pola singleton dalam Java (anggota publik statis, metode pabrik statis, tipe enum) dan menjelaskan pro dan kontra dari setiap metode serta hal-hal yang perlu diperhatikan saat serialisasi. Men

27 April 2024

[Efektif Java] Item 1. Pertimbangkan Metode Pabrik Statis Sebagai Pengganti Konstruktor Metode pabrik statis adalah cara yang fleksibel dan efisien untuk membuat instance alih-alih konstruktor. Mereka dapat diberi nama, mengembalikan instance yang sesuai dengan kondisi tertentu, dan meningkatkan kinerja melalui caching. Tidak seperti pola si

27 April 2024

Pemodelan Data Konseptual Pemodelan data konseptual adalah proses memisahkan entitas dan menyatakan hubungan antar entitas dalam ERD. Entitas adalah unit informasi independen, dan atribut adalah data yang dimiliki entitas. Pengidentifikasi secara unik mengidentifikasi entitas, dan
제이의 블로그
제이의 블로그
제이의 블로그
제이의 블로그

8 April 2024

[Bukan Lulusan Teknik, Bertahan Sebagai Pengembang] 16. Kiat-kiat Emas Membuat Portofolio Pengembang Pemula Pengembang pemula (terutama bukan lulusan teknik) harus menjelaskan dengan jelas layanan atau fungsi yang dikembangkan selain teknologi saat membuat portofolio. Misalnya, jika proyeknya adalah "Komunitas Pencari Kerja", maka Anda harus menyertakan konten
투잡뛰는 개발 노동자
투잡뛰는 개발 노동자
투잡뛰는 개발 노동자
투잡뛰는 개발 노동자

3 April 2024

Panduan Pengantar Rust Panduan Pengantar Rust: Mulai dari instalasi compiler hingga pemahaman konsep dasar. Artikel ini membahas penggunaan teknologi dan library terbaru melalui dokumentasi dan tutorial resmi. Artikel ini membahas variabel, fungsi, struktur data, dan topik-topi
곽경직
곽경직
곽경직
곽경직
곽경직

30 Maret 2024

[Sertifikasi Keahlian Fungsi Material Logam] Solusi 34 Dokumen ini membahas berbagai topik terkait ilmu material dan perlakuan panas, termasuk penjelasan tentang perlakuan panas cryogenic, batas kelelahan, quenching frekuensi tinggi, pengujian non-destruktif, kekerasan, karbonisasi, sifat logam, transformasi
blog.naver.com/gksmftordldi
blog.naver.com/gksmftordldi
blog.naver.com/gksmftordldi
blog.naver.com/gksmftordldi
blog.naver.com/gksmftordldi

23 April 2024

[Non-Majors, Survive as Developers] 7. What Helps and Doesn't Help When Applying for a New Job Saat mempersiapkan pekerjaan sebagai developer, blog teknologi tidak efisien, tetapi GitHub direkomendasikan untuk pengelolaan proyek dan berbagi kode sumber. Dari berbagai sertifikasi, sertifikasi Pemrosesan Informasi sangat penting untuk disiapkan, dan
투잡뛰는 개발 노동자
투잡뛰는 개발 노동자
투잡뛰는 개발 노동자
투잡뛰는 개발 노동자

29 Maret 2024

[Kisah Pengembang SI] 12. Tumpukan Teknologi yang Sering Digunakan dalam Proyek SI Pengembang SI di Korea Selatan umumnya menggunakan tumpukan teknologi seperti Spring berbasis Java, Oracle DB, Mybatis, JSP, JavaScript, HTML, CSS untuk mengembangkan sistem IT yang efisien dan stabil, dan menggunakan Eclipse sebagai lingkungan pengembang
투잡뛰는 개발 노동자
투잡뛰는 개발 노동자
투잡뛰는 개발 노동자
투잡뛰는 개발 노동자

19 April 2024