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

To jest post przetłumaczony przez AI.

제이온

[Efektywny Java] Element 5. Użyj wstrzykiwania zależności zamiast jawnego zarządzania zasobami

  • Język pisania: Koreański
  • Kraj referencyjny: Wszystkie kraje country-flag

Wybierz język

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

Tekst podsumowany przez sztuczną inteligencję durumis

  • Jeśli klasa wewnętrznie zależy od jednego lub więcej zasobów, lepiej nie używać statycznych klas narzędzi ani klas singletonów, a używać wstrzykiwania zależności.
  • Użycie wstrzykiwania zależności może poprawić elastyczność, ponowne użycie i łatwość testowania klasy, a zasoby można wstrzykiwać w konstruktorze, statycznej fabryce, builderze itp.
  • Wstrzykiwanie zależności można zastosować, przekazując sam zasób lub fabrykę zasobów, a w projektach o wielu zależnościach użycie frameworka wstrzykiwania zależności jest efektywne.

Jeśli klasa wewnętrznie zależy od jednego lub więcej zasobów, a te zasoby wpływają na działanie klasy, najlepiej nie używać singletonów i statycznych klas pomocniczych.


Klasa nie powinna tworzyć tych zasobów samodzielnie, a zamiast tego powinna przekazywać potrzebne zasoby do konstruktora. Wstrzykiwanie obiektów zależnych pozwala na poprawę elastyczności, ponownego wykorzystania i testowalności klasy.


Przykład

Przykład użycia statycznej klasy pomocniczej

public class SpellChecker {

    private static final Lexicon dictionary = new Lexicon();

    private SpellChecker() {
    }

    public static boolean isValid(String word) {
        // logika wykorzystująca słownik
    }

    public static List suggestions(String typo) {
        // logika wykorzystująca słownik
    }

Ta klasa pomocnicza zakłada, że ​​używany jest tylko jeden słownik. W rzeczywistości jednak słowniki są oddzielne dla każdego języka, a nawet specjalistyczne słowniki są przechowywane oddzielnie.


Przykład użycia klasy 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 wykorzystująca słownik
    }

    public static List suggestions(String typo) {
        // logika wykorzystująca słownik
    }


Klasa singleton również zakłada, że ​​używany jest tylko jeden słownik, co powoduje te same problemy, co w poprzednim przypadku.


Rozwiązanie 1 - Usuń słowo kluczowe final z pola.

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 wykorzystująca słownik
    }

    public static List suggestions(String typo) {
        // logika wykorzystująca słownik
    }


Możliwe jest również usunięcie słowa kluczowego final ze słownika w statycznej klasie pomocniczej lub klasie singleton i zmodyfikowanie projektu tak, aby zewnętrzny kod mógł zastąpić słownik innym. Jednak ten sposób jest niewygodny w użyciu i może prowadzić do problemów z jednoczesnością w środowiskach wielowątkowych.


Rozwiązanie 2 - Użyj wstrzykiwania zależności.

public class SpellChecker {

    private final Lexicon dictionary;

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

    public static boolean isValid(String word) {
        // logika wykorzystująca słownik
    }

    public static List suggestions(String typo) {
        // logika wykorzystująca słownik
    }


Na podstawie tego przykładu możemy zauważyć, że statyczne klasy i klasy singleton nie powinny być zależne od zasobów wewnętrznych. Oznacza to, że zasoby powinny być wstrzykiwane z zewnątrz.


Klasa wykorzystująca wstrzykiwanie zależności gwarantuje niezmienność dzięki słowu kluczowemu final i oferuje korzyści związane z obsługą wielu instancji zasobów. Wstrzykiwanie zależności można zastosować nie tylko w konstruktorze, ale także w statycznych fabrykach i konstruktorach.


Wstrzykiwanie zależności może obejmować proste przekazanie samego zasobu, ale często stosuje się również przekazanie fabryki zasobów. Fabryka to obiekt, który przy każdym wywołaniu tworzy nową instancję określonego typu. Ten schemat nazywany jest wzorcem fabryki metod i jest doskonałym przykładem implementacji fabryki w Javie 8 przez Supplier.


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


W przypadku fabryk zazwyczaj stosuje się ograniczony typ dzikiej karty do ograniczenia parametrów typu fabryki. Dzięki temu klienci mogą przekazać do fabryki dowolny podtyp typu określonego przez nich.


Wstrzykiwanie zależności zwiększa elastyczność i testowalność, ale w projektach o dużej liczbie zależności może być kosztowne. W takich przypadkach można użyć frameworka wstrzykiwania zależności (np. Dagger, Guice, Spring), aby zmniejszyć koszty.


Źródła

제이온
제이온
제이온
제이온
[Efektywny Java] Element 3. Gwarantuj singleton za pomocą prywatnego konstruktora lub typu wyliczeniowego W tym artykule przedstawiono trzy sposoby implementacji wzorca singleton w Javie (publiczne statyczne członkowie, statyczne metody fabryczne, typy wyliczeniowe) oraz opisano zalety i wady każdego z nich, a także środki ostrożności dotyczące serializacji.

27 kwietnia 2024

[Efektywny Java] Element 4. Aby zapobiec tworzeniu instancji, użyj prywatnego konstruktora Klasy pomocnicze, które zawierają tylko metody statyczne i pola, powinny mieć ustawiony modyfikator dostępu konstruktora na prywatny, aby zapobiec tworzeniu instancji. Dzięki temu można zapobiec błędnemu postrzeganiu konstruktora jako automatycznie genero

28 kwietnia 2024

[Efektywny Java] Punkt 6. Unikaj niepotrzebnego tworzenia obiektów Przewodnik po sposobach zmniejszenia liczby niepotrzebnych tworzeń obiektów w Javie. W przypadku obiektów niezmiennych, takich jak String, Boolean, lepiej jest używać literałów, a wyrażenia regularne najlepiej buforować w instancji Pattern. Ponadto automa

28 kwietnia 2024

[Javascript] Struktura obiektu (V8) Obiekt JavaScript w silniku V8 jest optymalizowany jak struktura w zależności od stanu, przełączając się między szybkim trybem i trybem słownika, który działa jako mapa skrótów. Szybki tryb jest szybki, gdy klucz i wartość są prawie stałe, ale może spowol
곽경직
곽경직
곽경직
곽경직
곽경직

18 marca 2024

Mockowanie klienta Prisma w NestJS dla testów jednostkowych Usunięcie zależności zewnętrznych jest ważne podczas testowania jednostkowego aplikacji. Możesz łatwo przeprowadzić testy jednostkowe za pomocą metody mockowania Jest dla Prisma ORM. Po zainstalowaniu pakietu jest-mock-extended możesz zmockować klienta Pr
제이의 블로그
제이의 블로그
제이의 블로그
제이의 블로그

2 kwietnia 2024

Czym jest wypełnianie slotów (Slot-Filling)? Wypełnianie slotów to proces, w którym chatbot zadaje pytania wielokrotnie, aż uzyska od użytkownika wszystkie niezbędne informacje. Na przykład podczas zamawiania kawy chatbot zapyta o rodzaj, temperaturę i wielkość, a zamówienie zostanie złożone dopiero
꿈많은청년들
꿈많은청년들
Obraz z dużym napisem "Wypełnianie slotów"
꿈많은청년들
꿈많은청년들

13 maja 2024

Jak Rust zapobiega błędom współbieżności Rust to potężny język, który rozwiązuje wyzwania związane z programowaniem współbieżnym. Jego system typów i model własności zapewniają bezpieczeństwo podczas przekazywania i udostępniania danych między wątkami. Wzory zmienności wewnętrznej, takie jak Mut
곽경직
곽경직
곽경직
곽경직
곽경직

28 marca 2024

Modelowanie danych koncepcyjnych Modelowanie danych koncepcyjnych to proces oddzielania jednostek i przedstawiania relacji między nimi w postaci diagramu ERD. Jednostki to niezależne jednostki informacji, a atrybuty to dane posiadane przez jednostki. Identyfikator jednoznacznie identyfik
제이의 블로그
제이의 블로그
제이의 블로그
제이의 블로그

8 kwietnia 2024

[Bez stopnia, przetrwać jako programista] 14. Podsumowanie często zadawanych pytań na rozmowach kwalifikacyjnych dla początkujących programistów Przewodnik po przygotowaniu do rozmów kwalifikacyjnych dla programistów. Wyjaśnia takie pojęcia często pojawiające się podczas rozmów jak: obszary pamięci głównej, struktury danych, RDBMS i NoSQL, programowanie proceduralne i obiektowe, nadpisywanie i prz
투잡뛰는 개발 노동자
투잡뛰는 개발 노동자
투잡뛰는 개발 노동자
투잡뛰는 개발 노동자

3 kwietnia 2024