Как правильно программировать на Kotlin? Код-ревью Junior разработчика.

preview_player
Показать описание
Сегодня в выпуске: Роман - Senior Andriod разработчик из EPAM Systems разобрал проект Junior разработчика на Kotlin.

Он разобрал архитектуру кода, отметил ошибки и показал как лучше всего их избегать, а также поделился полезной литературой, которую стоит почитать.

Хочешь прислать свой код на ревью?

---
---

00:00 Вступление
01:08 Знакомство с Романом
02:06 Общее впечатление по проекту
11:00 Использование Android зависимостей в коде
16:40 Архитектура проекта. Разбивка по слоям
23:05 Паттерн Repository. Написание тестов
26:25 Выделение логики из Repository во View
26:57 Обработка ошибок. Почему это важно?
28:37 Как использовать главный поток и зачем это нужно?
31:15 Использование lateinit. Почему это плохо?
32:53 Организация базы данных. Название таблиц и ColumnInfo.
35:05 Удаляйте не нужный код!
36:15 Обработка ошибок и сообщений 2.0
39:19 Структурированное название коммитов. Для чего это нужно?
42:35 Для чего нужно использовать Extensions.
43:50 Реактивный подход. Почему не стоит обращаться к модели?
46:00 Какую логику стоит выносить во View модель?
46:32 Run blocking на UI. Почему это страшно?
47:46 Как правильно инициализировать во View модель?
50:32 Валидация в map. Fail Fast
51:25 Общие замечания
58:10 Заключение
Рекомендации по теме
Комментарии
Автор

Очень классный разбор проекта, спасибо за ваши старания.
Я немного не понял один момент на 26:30. Почему вызывать на IO диспатчере прямо в репозитории плохо?
Репозиторий в данном случае всегда будет обращаться к БД или сети и это нужно делать на IO диспатчере(там могут быть блокирующие вызовы внутри и на Default диспатчере это может занять поток). Тогда зачем другим сущностям знать каким образом получаются данные?
Например, когда я в юзкейсе получаю данные из репозитория, то мне интересны сами данные, а не как они получаются. Затем я в юзкейсе обрабатываю данные и возвращаю их вью моделе. А во вью моделе я могу вызвать юзкейс на Default диспатчере. И тогда всё будет правильно работать: обращение к БД на IO, обработка данных на Default, а отрисовка данных на Main.
Объясните пожалуйста, где я допустил ошибки в размышлениях?

dimagor
Автор

не видны папки / потому что чел закрыл своей программой

nurkhanm