
Igor
26.09.2017
19:29:55
Хотя плюшка в виде возможности тестирования на удаленной машине без моков дорогого стоит.

Sasha
26.09.2017
19:32:30

Kirill
26.09.2017
19:33:07

Sasha
26.09.2017
19:33:11
Рум все тоже самое внутри, тока руками писать не надо.

Google

Kirill
26.09.2017
19:35:28
Ясно. В общем наверное мне стоит самому пописать и решить.
Мне после реалма понравилось.

Sasha
26.09.2017
19:36:06

Константин
26.09.2017
19:50:31
Ребзя, привет
А кто разрабатывает телегу на андроид?

Konstantin
26.09.2017
19:52:10
Дуров

JRoot3D
26.09.2017
19:52:49
Лично

Kirill
26.09.2017
19:52:53

Igor
26.09.2017
19:53:04
Чем?
Тем, что нет подводных камней

Константин
26.09.2017
19:53:08
Костян, спасибо

Дуров
26.09.2017
19:53:18
Дуров
Есть неофициальные клиенты

Igor
26.09.2017
19:53:25
SQLite прост донельзя, можно в нем все, что необходимо для кэша стандартного бизнес-приложения

Дуров
26.09.2017
19:54:02

Quantum Harmonizer
26.09.2017
19:54:39

Google

Igor
26.09.2017
19:54:46
В редких случаях я готов использовать самодельное файловое хранилище, но это редкие кейсы. В остальных, когда нужно реляционное решение - SQLite при умении им пользоваться, а не городить один супер-класс - лучшее решение из всех. Без ORM и надстроек - миграции просто делать, схему обновлять просто, есть FOREIGN KEY, есть COMPOSITE KEY, есть возможность сделать индексацию вручную
Более того - в случае чего можно сделать на базе SQLite нормальный ipc между приложениями. С Realm не вкатит как и с любым другим вариантом.
Сдохнете пока напишете что-то подобное

Kirill
26.09.2017
19:55:59
Годные аргументики

Igor
26.09.2017
19:58:26
Годные аргументики
Сломал себе со всякими модными штуками каждый палец каждой ноги. Единственное, что еще хоть как-нибудь можно использовать и чем я был сравнительно доволен - StorIO. Вроде сейчас еще что-то с rx появилось прикольное, но уже не стал экспериментировать.

Kirill
26.09.2017
19:59:23

Igor
26.09.2017
19:59:48
Да, но ИМХО, куда приятнее написать свою обертку и работать с ней

Kirill
26.09.2017
19:59:50

Sasha
26.09.2017
20:00:22
Тем, что нет подводных камней
Я бы не сказал что их там нет. Буквально на прошлой недели вроде кто то из гугла целый пост накотал как минмум по одной проблеме выборке данных из таблиц.

Михаил
26.09.2017
20:01:06
Подскажите, пожалуйста, как прекратить подгружать айтемы в Endless RecyclerView, если список кончился
Он начинает с начала загружать

Igor
26.09.2017
20:01:42

Михаил
26.09.2017
20:02:06
Возможно, поле id сделать

Sasha
26.09.2017
20:02:55

Igor
26.09.2017
20:03:23

Konstantine
26.09.2017
20:19:52

Igor
26.09.2017
20:20:07

Andrey
26.09.2017
20:20:30
Не, правда, послушал бы! Нет предвзятости, но даже мой небольшой опыт в нем показал мне, что это кошмар.

Google

Konstantine
26.09.2017
20:21:16
Единственный плюс голого сйлайта - он становится гибким. Но в ущерб (УЩЕРБИЩЕ блять) скорости написания и нормальной поддержки кода.

Andrey
26.09.2017
20:21:19
Конкаренси нет, кода писать чтобы что-то поднять надо минут 30-час
сложно дебажить
ловишь нереальные баги

Konstantine
26.09.2017
20:21:59
Это как тупо ui делать на голым канвасом. Сделаешь что угодно, но с трудом.
Молюсь, чтобы гугл тупо купили реалм и включили его в андроид нативно, во заживем

Andrey
26.09.2017
20:22:32
поддерживаю
А чем плохо держать две базы сразу?
realm И sqlite + orm


Igor
26.09.2017
20:26:19
Не, правда, послушал бы! Нет предвзятости, но даже мой небольшой опыт в нем показал мне, что это кошмар.
Заведите следующие классы:
1) %DBO_NAME%LocalMapping. Здесь описываем три вещи - поля таблицы, контракты для join-ов, маппинг из/на курсор
2) %DBO_NAME%LocalService. Здесь реализуем интерфейс для доступа к данным. Все через курсор, все в транзакциях. Для транзакций делаем свою обертку в стиле Observable.create(...). Тут же метод release, invalidate и пр.
3) %DBO_NAME%DBO. Здесь собственно сам иммутабельный (sic!) бин. Никаких отображений на курсор/из курсора здесь быть не должно.
4) %DBO_NAME%Statements. Тут все, все, сцуко, стейтменты, которые у нас есть для сущности, прописываем. В том числе - по контрактам с join-ами. Все, что можно запихнуть в SQLIteStatement - пихаем. Что нельзя - в строку и глушим интерфейсом для bind-инга значений.
5) DatabaseProvider. Тут предоставляем синхронизированный доступ к подключению к БД и держим (sic!) на него ссылку. Также содержит метод а-ля release/invalidate.
6) DatabaseOpenHelper. Тут все понятно. Инкапсулируем делегаты для миграций и создания.
Вот и все.
Для каждой сущности все кроме п. 5 и 6 проделываете. Выходит по ~ 700 строк на сущность. С Join-ами под 1,2k.


Sasha
26.09.2017
20:29:33

Igor
26.09.2017
20:29:39
Не сильно
Потом окупается
Никаких багов, можно в любой момент сделать все это реактивным, да и вообще, все чисто и прозрачно

Роман
26.09.2017
20:32:29
Це жорстко

Andrei
26.09.2017
20:37:05
Подскажите как тестировать Realm.
В юнит-тестах RealmResults не создать, если переносить юнит-тесты в инструментальные и создавать in-memory realm, то начинаются траблы с передачей объектов между потоками. RealmNotification не работают, так как тесты идут не в главном потоке.

Igor
26.09.2017
20:37:58

Andrei
26.09.2017
20:42:01

Igor
26.09.2017
20:42:46

Google

Igor
26.09.2017
20:42:58
Исключительно субъективное мнение

Andrey
26.09.2017
20:43:34
Мне все еще интересно, есть ли тут люди, которые используют эти две базы одновременно в своих проектах
и вообще бывает ли надобность в таких вещах

Andrei
26.09.2017
20:44:25

Igor
26.09.2017
20:45:03

Admin
ERROR: S client not available

Igor
26.09.2017
20:45:40
Принцип такой же, что и в реактивных аксессорах (изменил поле - триггернуло observer-ы)

Denis
26.09.2017
20:45:49

Andrei
26.09.2017
20:46:32

Igor
26.09.2017
20:46:41
в DBFlow есть из коробки
Не, не спорю, возможно и есть. Просто мне например проще скопировать пару базовых классов из прошлого проекта, потом еще пару мини-либ своих же и приготовить на их основе реактивные уведомления.

Denis
26.09.2017
20:47:22
промахнулся цитатой, хотел ответить @kenji47 )

Sasha
26.09.2017
20:47:50

Andrei
26.09.2017
20:50:23
Что это значит?
Не такие точные? ObjectBox пока не следит за one-to-many полями.

Inessa
26.09.2017
20:52:04

Igor
26.09.2017
20:53:06
Использовал его с SQLCipher, помню что были сначала просто какие-то косяки, а потом наткнулся на проблему миграции на рефлексии. А про то, что она ломается на SQLCipher никто не говорил.
Но ломается
Ни одной issue нигде не было, как исправлять стремные ошибки рефлексии - х
*хз

Andrei
26.09.2017
20:54:03

Igor
26.09.2017
20:55:46

Google

Igor
26.09.2017
20:56:13
Можно передавать метаинформацию, можно - новые значения. Можно - и то и то

Inessa
26.09.2017
20:57:52

Igor
26.09.2017
20:58:13
Прости, потерял контекст просто
а Realm - просто эстетически не зашел
И еще что-то странное там с потоками было.
и с его инстансами

Andrei
26.09.2017
21:00:22

Sasha
26.09.2017
21:00:29

Igor
26.09.2017
21:00:49

Andrei
26.09.2017
21:01:40
Реалм очень удобная на самом деле. В пару строк можно сделать все приложение реактивным. Только потом проблемы начинаются в самых неожиданных местах.

Sasha
26.09.2017
21:02:46
и с его инстансами
Там все просто. Нельзя открывать из разных потоков. То есть нужно закрывать прежде чем открыть в другом потоке, поэтому для него обычно отдельный executor делают. Хз, в моих кейсах дефолтного всегда хватало.

Igor
26.09.2017
21:03:06

Denis
26.09.2017
21:03:43
был бы редактор бд ещё под винду и линух, цены бы не было реалму

Ivan
26.09.2017
21:05:30
добрый вечер!