opisane • Jak żyć? • jak bezboleśnie wprowadzać zmiany w aplikacji? • jak nie psuć wcześniej działających ficzerów wprowadzonymi zmianami? • jak testować? • jak dzielić odpowiedzialność? • jak osiągnąć mniejszy coupling? • jakich patternów / biliotek używac żeby to osiągnąć
• Logika UI pomieszana z asynchronicznym pobieraniem danych • Callbacks everywhere • Mapowanie kursorów na obiekty biznesowe w UI • Activity i Fragmenty po 1000+ linii • Całkowite uzależnienie od frameworka (import android.*) • Testy?
productName) { } public int removeBoughtProducts() { } public Product getProduct(long id) { } public int size() { } @Override public Iterator<Product> iterator() { } }
public interface UseCase<Result, Argument> { Result execute(Argument arg) throws Exception; } public interface UseCaseArgumentless<Result> { Result execute() throws Exception; }
utrwalania danych nie powinien operować na obiektach domeny (wyciekająca abstrakcja od środka). • Wyznaczenie granicy. • Trzymanie się „zasady zależności”.
tylko od ProductEntityStore i Mappera (Product -> ProductEntity) • Łatwe do zmockowania aby przetestować w izolacji. public interface ProductEntityStore { List<ProductEntity> getAllProduct(); void storeAllProducts(List<ProductEntity> entities); }
znaleźć - tworzę i zwracam • nie wiem skąd go wziąć? - sięgam do modułu Moduły Litania metod dostarczających zależności. Dagger daj obiekt ObjectGraph @Singleton
pewno wiadomo, że nie urośnie? • Duża ilość wywołań metod. • Mniej optymalne rozwiązanie pamięciowo - tworzy i zwalnia się dużo obiektów, fragmentacja pamięci. • Samo podejście i ,,zasada zależności” słuszne - umożliwiają testowanie.