Wywalić ViewModel z Android Architecture Components.
Czemu to byłoby ulepszeniem?
Ponieważ ViewModel jest ograniczony pod względem tego, jak się go tworzy. Wolałbym zastapić zwykłą klasą, która nie ma narzuconych ograniczeń.
- Pozbyć się nadmiarowej ilości interfejsów, którą niczemu nie służą poza pisaniem testów, które tak średnio testują.
Takie stwierdzenie sugeruje, że prawdziwym (głębszym) problemem są kiepsko napisane testy. A nadmiar interfejsów to tylko jeden z objawów. "Stłucz pan termometr, nie będziesz mieć gorączki".
No to przecież napisałem, że są testy, które prawie niczego nie testują. Usunięcie tych interfejsów wymusiłoby napisanie prawidłowych testów. Głównie w warstwie prezentacji w moim przypadku. Przykładowo wolałbym pozbyć się interfejsu LoginUseCase
, bo niczego nie wnosi. Wtedy wystarczy dostarczyć sztuczną implementację AuthService
na potrzeby testów. Uporściłoby to też graf obietków.
public interface LoginUseCase extends ObservableTransformer<LoginAction, LoginResult> { }
public final class LoginTransformer implements LoginUseCase {
private final AuthService authService;
private final TokenCache tokenCache;
private final Moshi moshi;
@Inject public LoginTransformer(AuthService authService, TokenCache tokenCache, Moshi moshi) {
this.authService = authService;
this.tokenCache = tokenCache;
this.moshi = moshi;
}
}
@Binds abstract LoginUseCase bindLoginPickupUseCase(LoginTransformer transformer);
Dagger wymaga namotania większej ilości boilerplate'u, i w wielu projektach jest to strzelanie z armaty do wróbli.
Zgadzam się z drugim stwierdzeniam, bo Dagger wymaga większej ilośc kodu na starcie pod fundamenty dostarczania zależności, ale to Koin wymaga więcej boilerplatu niezależnie od fazy aplikacji.