Pozbywanie się zależności z klas.

Odpowiedz Nowy wątek
2018-11-28 13:30
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ć?

Pozostało 580 znaków

2018-11-28 13:33
0

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


"Sugeruję wyobrazić sobie Słońce widziane z orbity Merkurego, a następnie dupę tej wielkości. W takiej właśnie dupie specjalista ma teksty o wspaniałej atmosferze, pracy pełnej wyzwań i tworzeniu innowacyjnych rozwiązań. Pracuje się po to, żeby zarabiać, a z resztą specjalista sobie poradzi we własnym zakresie, nawet jeśli firma mieści się w okopie na granicy obu Korei."
-somekind,
konkretny człowiek-konkretny przekaz :]

Pozostało 580 znaków

2018-11-28 13:37
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.

(

)

edytowany 1x, ostatnio: maxbutler, 2018-11-28 13:37

Pozostało 580 znaków

2018-11-28 16:03
0

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


"HUMAN BEINGS MAKE LIFE SO INTERESTING. DO YOU KNOW, THAT IN A UNIVERSE SO FULL OF WONDERS, THEY HAVE MANAGED TO INVENT BOREDOM."

Pozostało 580 znaków

2018-11-28 17:27
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
{
//...
}

Pozostało 580 znaków

2018-11-28 17:34
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.


"HUMAN BEINGS MAKE LIFE SO INTERESTING. DO YOU KNOW, THAT IN A UNIVERSE SO FULL OF WONDERS, THEY HAVE MANAGED TO INVENT BOREDOM."

Pozostało 580 znaków

2018-11-28 18:04
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.

Pozostało 580 znaków

2018-11-29 16:58
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.


"Programs must be written for people to read, and only incidentally for machines to execute." - Abelson & Sussman, SICP, preface to the first edition
"Ci, co najbardziej pragną planować życie społeczne, gdyby im na to pozwolić, staliby się w najwyższym stopniu niebezpieczni i nietolerancyjni wobec planów życiowych innych ludzi. Często, tchnącego dobrocią i oddanego jakiejś sprawie idealistę, dzieli od fanatyka tylko mały krok."
Demokracja jest fajna, dopóki wygrywa twoja ulubiona partia.
edytowany 1x, ostatnio: Wibowit, 2018-11-29 17:01

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

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