Pozbywanie się zależności z klas.

0

Czym kierować się, żeby usuwać zależności z klas? Robienie interfejsu do każdej klasy to chyba paranoja, więc jak zdroworozsądkowo to wykonać?

0

Obczaj sobie termin wstrzykiwanie zależności (Dependency Injection)

0

Twórz interfejsy dla klas ulotnych, takich z największym prawdopodobieństwem zmiany. Kieruj się zasadą odwrócenia zależności, aby wszystko spiąć spróbuj pobawić sie DI containers.

( )

0

Jakie zależności i czemu chcesz je usuwać?

0

@somekind: chodzi mi o zwykłe zależności pomiędzy klasami, takie coś, że mam np

class A
{
//...
}

class B
{
   A a = new A();
//...
}

class C
{
   public C(B b)
{
//...
}
//...
}

skąd mam wiedzieć kiedy i czy warto wprowadzać interfejs np:

public interface IA
{
//...
}
0

No interfejs wtedy, gdy klasa wykonuje jakieś długotrwałe operacje, czyli np. na bazie danych, systemie plików, czy połączeniu sieciowym. No i naturalnie wtedy, gdy implementujesz coś w oparciu o wzorzec projektowy, który potrzebuje interfejsów do działania.

0

Przykładem stosowania interfejsów jest oddzielenie szczegółów implementacji od abstrakcji. Przykład: w projekcie mam dwa moduły - jeden androidowy, drugi czysty JVM. Moduł androidowy zależy od JVM'u. W tym module czysto JVM'owym mam utworzony interfejs ~Database ale implementacja czyli szczegół znajduje się w module android. Dzięki temu mam kompletnie oddzielone zależności androidowe od logiki biznesowej. Wykorzystanie implementacjii Database zrobione jest w module czysto JVM - tam nie ma słowa o androidzie.

Gdzie wykorzystać interfejsy jest trochę podobne do pytania: gdzie wykorzystać listę / tablicę a gdzie po prostu napisać kilka zmiennych. Jeśli w Twoim kodzie widzisz że można stworzyć algorytm który będzie operować na wielu różnych danych/obiektach w ten sam sposób to warto rozważyć wprowadzenie interfejsu. Zaznaczam wielu, jeśli masz tylko jedną implementację interfejsu wtedy wartość takiego dodatku będzie znikoma (a może nawet spowodować nieporozumienia).

Tak jak napisałeś w przykładzie: jeśli po prostu klasa A B C zależą od siebie to nie ma konieczności wprowadzania interfejsu.

5

Interfejs rób wtedy, gdy się do czegoś przyda. W typowym przypadku robię interfejs jeśli ma co najmniej dwie produkcyjne implementacje. Powodów to stworzenia interfejsu może być więcej, ale jeśli interfejs da się wywalić bez żadnej straty dla działania programu czy testów to często wywalam.

Wstrzykiwanie zależności nie wymaga tworzenia dodatkowych interfejsów. Możesz spokojnie wstrzykiwać klasy.

Nie ma sensu komplikować mechanizmu wstrzykiwania zależności, bo sedno tego mechanizmu jest bardzo proste - najpierw podajesz klientowi (klasie potrzebującej zależności) zależności z zewnątrz poprzez konstruktor (albo settery jeśli lubisz masochizm), a w osobnym kroku wywołujesz metody na kliencie które z tych zależności korzystają. Zabawa w tworzenie interfejsów to dorabianie ideologii do prostego mechanizmu.

1 użytkowników online, w tym zalogowanych: 0, gości: 1