[Android] Niech Activity nie implementuje widoku (film!)

Jedną z najpopularniejszych rekomendacji dla programistów Androida jest zasada, która w ogólności mówi: oddzielaj elementy widoku od logiki aplikacji, a implementowana jest najczęściej poprzez wzorce MVC, MVP czy MVVM.

Wśród argumentów stojących za tą rekomendacją, najmocniejsze są dwa:

  1. kiedy logika jest w klasie pozbawionej elementów widoku, łatwiej jest ją testować
  2. im więcej kodu wyciągniemy z klas typu *Activity czy *Fragment, tym mniejsza jest szansa, że złamiemy zasadę pojedynczej odpowiedzialności

Zgadzam się, oczywiście z każdym z nich. Mam jednak wrażenie, że ten drugi nie jest do końca rozumiany. Uważam, że duża część programistów, którzy stosują wspomniane dobre praktyki, nie stawia sobie pytania: czy rzeczywiście zrobiłem wszystko żeby nie złamać SRP?

Szukając informacji o wzorcu Model View Presenter, najczęściej trafiamy na rozwiązanie takie, że aktywność posiada referencję do prezentera, a następnie przekazuje mu referencję do widoku lub callbacków – interfejsów, które ta aktywność implementuje.

Konsekwencja jest taka, że tej aktywności przybywa metod. Ja stosuję nieco inne podejście, w którym zamiast nowych metod tworzę nowe klasy. Zapraszam Was do oglądnięcia filmu, na którym pokazuję to podejście: