1) когда мне надо поменять объект, я меняю отвязанный от реалма, и сохраняю через репозиторий. Поиск по спискам я делаю либо с помощью Rx, либо с помощью extention методов к колекциям в котлин. Все зависит от ситуации. В котлине это выглядело бы примерно так:
val kid = parent.kidlist.firstOrNull { kid -> kid.name == "Piter"}
2) возможно так и есть, но городить пул потоков — это преждевременная оптимизация, вот когда начнутся тормоза в текущем вариант — я задумаюсь, сейчас все работает достаточно быстро. Никакого callback-hell у меня нет, везде rxjava. Делать операции с БД в UI — сомнительное занятие, на мой взгляд, но тут дело каждого.
4) тестирование реалма — это вообще отдельная тема, к тому же холиварная.
Вообще, у меня не вызывает проблем работа с реалмом уже давненько.
1) Вся работа с реалмом у меня ведется изолированно через репозиторий. Ни каких active records у меня нет, так как я предпочитаю работать с иммутабельными объектами, с ними меньше непредсказуемых поведений. Кстати, это же и устраняет проблему с RealmList
2) Работа с реалмом всегда ведется в фоновом потоке, на каждый запрос создается инстанс и закрывается после выполнения. Никаких проблем с производительностью я не заметил. Тут очень поможет reactive подход. Написал один раз и радуешься потом.
3) Касательно множетственного наследования: в java его как бы вообще нет. Я понял о чем речь идет, что в цепочке наследования не может быть ничего, кроме RealmObject, но это немного другое.
4) На счет тестов, да, тут проблема, но надо мокать не реалм, а репозиторий в принципе, потому что логики в репозитории должно быть минимум. Если тестировать его — то это уже интеграционные тесты. Последние с реалимом надо запускать сразу на дейвасе.
Интересно читать чужой опыт, но надо было разбить статью на несколько и сделать серию. Дело в том, что получилась солянка. Да и читать несколько маленьких статей проще, чем одну огромную.
Про остальное не скажу, но вот на счет колбеков и async-await, то в котлине стектрейс сохраняется. Да и вообще, без колбеков в андроид разработке сложновато будет жить. Что касается производительности, то за многие вкусности приходится платить. Обычно тут вопрос стоит ли оно того или нет.
Сплэш может быть идеальным местом для инициализации нативных библиотек.
Я, например, сделал там инициализацию ретрофита, AndroidThreeTen и настройку Realm.
Мне кажется проблему backpressure библиотека не должна решать. Это должен делать пользователь библиотеки. Потому что как минимум не один вариант можно выбрать.
я рассматриваю разделение точкой только для смысловых блоков, тогда как в блоке нижним подчеркиванием разделяю слова, относящиеся к блоку.
например так
Для себя заметил, что когда разделяешь сроки по экранам префиксами, то удобней пользоваться точками, нежели нижним подчеркиванием.
Я, например, делаю вот так, профит замечаешь позже, главное не скатиться с такого именования
2) возможно так и есть, но городить пул потоков — это преждевременная оптимизация, вот когда начнутся тормоза в текущем вариант — я задумаюсь, сейчас все работает достаточно быстро. Никакого callback-hell у меня нет, везде rxjava. Делать операции с БД в UI — сомнительное занятие, на мой взгляд, но тут дело каждого.
4) тестирование реалма — это вообще отдельная тема, к тому же холиварная.
1) Вся работа с реалмом у меня ведется изолированно через репозиторий. Ни каких active records у меня нет, так как я предпочитаю работать с иммутабельными объектами, с ними меньше непредсказуемых поведений. Кстати, это же и устраняет проблему с RealmList
2) Работа с реалмом всегда ведется в фоновом потоке, на каждый запрос создается инстанс и закрывается после выполнения. Никаких проблем с производительностью я не заметил. Тут очень поможет reactive подход. Написал один раз и радуешься потом.
3) Касательно множетственного наследования: в java его как бы вообще нет. Я понял о чем речь идет, что в цепочке наследования не может быть ничего, кроме RealmObject, но это немного другое.
4) На счет тестов, да, тут проблема, но надо мокать не реалм, а репозиторий в принципе, потому что логики в репозитории должно быть минимум. Если тестировать его — то это уже интеграционные тесты. Последние с реалимом надо запускать сразу на дейвасе.
Я, например, сделал там инициализацию ретрофита, AndroidThreeTen и настройку Realm.
например так
На мой взгляд выгляди лаконичней, в сравнении с таким вариантом
Я, например, делаю вот так, профит замечаешь позже, главное не скатиться с такого именования
В java коде правда это автоматом заменяется на такую конструкцию
Но мне все равно нравится