Baza danych w Androidzie

0

Jakiego ORM'a używa się w komercyjnych projektach ? Który jest najbardziej popularny ?
A może w ogóle się nie używa i baza danych w takich projektach jest natywna ?

2

Polecam Room. W oficjalnej dokumentacji SQLite Androidowego do niego odsyłają.

2

Z ORMów to chyba OrmLite i GreenDao. W sumie nie wiem, bo nigdy nie korzystałem z ORMów na poważnie w Androidzie, bo są kiepskimi rozwiązaniami na tę platformę.

Najbardziej lubię SqlDelight ewentualnie Room, ale należy pamiętać, że to nie są ORMy.

Są jeszcze alternatywy nie SQLowe jak Realm i ObjectBox, ale nie polecam.

0

Dlaczego ORM'y są kiepskim rozwiązaniem na tę platformę ? Wszystkim zajmuje się biblioteka i mamy mniej syfu w kodzie. Implementacja operacji na bazie danych jest znacznie szybszy i jest mniej błędów, nie trzeba się niczym martwić.

1

Na Androidzie ORMy są nienajlepsze, bo relacje między obiektami są dociągane najczęściej leniwie. Idea sama w sobie nie jest zła, ale nie pasuje do modelu wątkowości na Androidzie. Powiedzmy, że masz klasę User, która ma w sobie pole Collection<User> friends i chcesz to wyświetlić np. w RecyclerView. Kolekcja zostanie pobrana dopiero w momencie gdy zapyta o nią główny wątek. Teraz jeżeli tych przyjaciół trochę jest, to ekran zacznie przycinać. Biorąc pod uwagę, że zazwyczaj wyświetla się listę wszystkich użytkowników z np. ilością przyjaciół, to zrobi się to bardzo toporne przy przewijaniu ekranu.

Najlepiej w takim wypadku mieć osobnę klasę UserWithFriends, która już dociągnie wszystko co trzeba w momencie tworzenia. Tylko wtedy z ORMem trzeba się bawić w mapowania itd. OM daje Ci to z buta w momencie budowania zapytań.

Pomijając specyfikę Androida, to ORMów nie lubię z kilku innych powodów.

  • Zapytania są "stringly typed" i o błędach dowiesz się dopiero w trakcie działania programu a nie w momencie kompliacji.
  • Nie można wykorzystać do końca wiedzy z SQLa, bo każdy ORM radzi sobie inaczej z tworzeniem zapytań.
  • Klasy muszą być zazwyczaj mutowalne.
  • Wymagana jest anotacjofilia do konfiguracji klas. Tutaj Room też nie daje rady niestety, ale o problemach dowiadujesz się albo przy pisaniu kodu albo przy kompilacji, więc tragedii nie ma.

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