Depndency Injection w Kotlinie

0

Jakich bibliotek używa się w Kotlinie do wstrzykiwania zależności?
Czym będzie się różniło wstrzykiwanie zależności przed konstruktor, a przykładowy zapis

private val repository by inject<SimpleRepository>()

który jest przykładowo w https://github.com/InsertKoinIO/koin

1

W sumie to już dwa lata pisania w kotlinie i nadal nie udało mi się znaleźć potrzeby skorzystania z biblioteki do DI.

2

Jest Koin, Kodein, są też jakieś wrappery do Guice. Większość z nich ma swoje DSL + używają Kotlinowych delegated properties. Jeśli masz mały projekt to polecam jednak ręczny "wiring" :)

Czym będzie się różniło wstrzykiwanie zależności przed konstruktor, a przykładowy zapis

Różnica jest fundamentalna, bo w pierwszym przypadku piszesz kod, a frameworku do DI, używasz "z boku" do łączenia wszystkiego razem. Natomiast żeby użyć zapisu, który podałeś, to o ile się nie mylę to Twoja klasa musi implementować KoinComponent - ten interfejs dodaje obsługę delegates properties dzięki czemu injectowanie z użyciem by działa. Jest to jednak mocne sprzęganie Twojego kodu z kodem frameworku DI, co mnie osobiście mało się podoba.

2

Używam Koina, już 3 rok leci, 2 duże projekty napisane, X projektów bocznych też tego już używała w moich firmach. Polecam.

1

Troszkę off top. Co wam daje w kotlinie kontener oraz framework do DI względem przekazywania zależności przez konstruktor?

0

To że trzeba mniej napisać tych wszystkich ręcznych modułów, z drugiej strony ma to też swoje wady że wszystko się pląta ze wszystkim i łatwo złamać np. zasadę Dependency Inversion z SOLID. Moim zdaniem najlepsze jest podejście pośrednie czyli tworzenie fasad z logiką biznesową bez frameworka i użyciem frameworka do zapewnienia infrastruktury :)

2

To że trzeba mniej new pisać, z drugiej strony ma to też swoje wady że wszystko się pląta ze wszystkim i łatwo złamac np. zasadę IoC z SOLID.

Ile razy trzeba pisać to new w kotlinie?

Edit:
Widzę, że ten koin nie jest oparty o magię, czyli odpada największa wada innych frameworków.

Co więcej, nie widze dużej różnicy między DI opartym o konstruktory a koin. Ani specjalnego zysku, ani strat, ale przyjrze się, bo może zmienie zdanie i jeszcze docenię.

1
DisQ napisał(a):

Troszkę off top. Co wam daje w kotlinie kontener oraz framework do DI względem przekazywania zależności przez konstruktor?

Wpis do CV i poczucie wyższości

3

Koin ma cztery zalety:
Bardzo prosty, juniorowi ogarnięcie podstaw zajmuje 1 dzień
Wspiera tworzenie Androidowych ViewModel 1 linijka z zaleznosciami z kontenera, które bez DI tworzy się w bardzo długi i brzydki sposób.
Jeśli nie chodzi o ViewModel to po prostu przyspiesza budowanie singletonow/fabryk i ich wstrzykiwanie w inne singletony/fabryki obecne w kontenerze. Do tego używa się tylko wstrzykiwanie przez konstruktorzy. Można to robić ręcznie, ale byłoby sporo boiltercodu.
Na poziomie konfiguracji builda łatwo można manipulować jaki plik KoinModule wejdzie do builda tym samym zmieniając zależności zmiana 1 pliku nie 20.

Lepszy od Daggera bo nie generuje kodu i kompiluje się dużo szybciej (osobista opinia, niektórzy wola generować kod)

Lekki jak na bibliotekę do Di, nadaje się na mobilki

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