Baza danych w Androidzie

Odpowiedz Nowy wątek
2018-07-12 00:47
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 ?

Pozostało 580 znaków

2018-07-12 04:39
2

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

Pozostało 580 znaków

2018-07-12 06:56
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.

edytowany 1x, ostatnio: Michał Sikora, 2018-07-12 07:08
A czym jest Room? Serio pytam, bez podtekstów. Obiektową bazą danych? - kmle 2018-07-12 21:48
Room też jest oparty o SQL, więc nie jest obiektową bazą danych jak np. wspomniany przeze mnie Realm. Room to Object Mapping - OM. Nie ma w nim wsparcia dla powiązań relacji. Jeżeli masz np. encje Customer i Products, nie możesz zagnieździć produktów w kliencie. Powinieneś stworzyć osobną klasę CustomerWithProducts i budować jej instancje za pomocą własnych zapytań albo mechanizmów wspierających przez bibliotekę. To trochę kłamstwo, bo w Room można użyć @Ignore, ale wtedy musisz mutować obiekt i trzeba się namęczyć z zapytaniami. Wtedy już ORM lepszy pewnie. - Michał Sikora 2018-07-13 10:00
Dzięki za wyjaśnienie. Rzeczywiście do tej pory Room wykorzystywałem jako worek na obiekty i nie musiałem używać relacji. - kmle 2018-07-13 16:32
Małe sprostowanie. relacja == tabela w kontekście baz danych. OM nie ma wsparcia dla powiązań między relacjami w mapowanych obiektach. - Michał Sikora 2018-07-13 17:43

Pozostało 580 znaków

2018-07-12 10:53
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ć.

Pozostało 580 znaków

2018-07-12 16:53
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.
edytowany 4x, ostatnio: Michał Sikora, 2018-07-12 17:14

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

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