Разбор кода приложения по доставке пиццы

Опубликовано: 01 Январь 1970
на канале: Android Broadcast. Все об Андроид разработке
7,575
256

Разбираю код приложения подписичика по доставке пиццы

🔗 Android Meetup от AvitoTech http://abdev.by/X8W?/erid=LdtCKC2Sp

🔗 Каналы "Android Broadcast" https://taplink.cc/android_broadcast
✉️ Написать Кириллу [email protected]

🔗 Android Broadcast Плюс http://abdev.by/q2A

#codereview #androiddev #androidbroadcast

0:00 Обратный отсчёт
0:23 Начало
0:50 Знакомство с автором и проектом
3:55 Обратная связь
6:16 Проекта не собрался после git clone
8:35 Важность README
9:45 Исследуем структуру проекта и зависимости
10:40 Какие карты лучше выбрать
11:55 Application и ленивая инициация
12:50 DI, чем заменить lateinit,
15:30 DI, как заменить provide Context
17:48 AndroidMenifest
18:08 App Links
20:13 Merged манифест
21:27 Main Activity
22:26 Хранение Dagger компонентов
23:48 DI, internal на непубличные объекты
24:15 Library mode компилятора
25:20 DI, перенос @Inject в конструктор класса и использование @Binds
27:15 DI, про @Inject аннотацию, добавление в проект
32:37 Jetpack Splash Screen
33:05 MainViewModel: инициализация UseCases, init функции
34:10 MainViewModel: про tryEmit, без emit с StateFlow, а обновлять value
35:17 Имхо лучше через state.update, потокобезопасно
35:57 Про нейминг, про инициализацию на сплэш экране
37:00 AppResult и корутины
37:40 try catch и Cancellation и Runtime исключения
39:50 Про Result класс,диспатчер по умолчанию
40:30 Ответственность функции за свой Dispatcher
42:00 Разбор репозитория, про хэндлеры
43:05 Про сохранение оригинальных исключений
44:10 Кто должен указаывать CoroutineDispatcher
46:25 Разбор темы приложения
47:40 Настройка темы в Activity
50:10 AppScreen: Минимальный Scaffold, RTL, снова про компонент DI
53:00 Про связанность фичей, интерфейсы для них
56:10 Про слабосвязанную навигацию и текущую реализацию
57:35 Про многомодульность
58:48 Как создать Kotlin модуль с Android классами/зависимостями
1:00:30 Про устаревший buildSrc
1:02:00 Фича-модуль Home: как изменить дефолтный язык, оптимизация картинок
1:05:17 Как Android масштабирует drawable ресурсы
1:06:50 hiltViewModel()
1:07:37 Навигация из VM в UI, one-time event и интерфейс навигатора
1:09:48 Jetpack Compose: Про нейминг аргументов
1:10:45 Jetpack Compose Preview
1:12:42 HomeViewModel: прогрев в init, вынос в репозиторий функционала
1:15:00 Про кэширование с бекендом и обдумывания логики
1:17:35 Лучше не забывать обработку ошибок
1:18:55 Про консистентность кода в контексте DI
1:20:20 Именование аргумментов
1:21:00 Небольшая оптимизация
1:21:40 Переход к domain data модулям
1:22:25 Про ключ по умолчанию для inject ViewModel
1:23:16 Про разбиение на модули по смыслу (ресурсы, shared composables)
1:26:00 Консистентность, положили интерфейс и impl рядом
1:26:30 Про instance интерфейса и как это сделали с List в Kotlin
1:27:20 Минусы хранения UseCases в одном месте
1:28:18 Про консистентность suspend обработки данных
1:29:01 Как удобно инжектить Dispatchers
1:30:01 BaseUrl и inline class
1:31:25 Консистентность дефолтных параметров в Retrofit интерфейсе
1:32:32 Интерфейс и impl в один файл, не забывать везде использовать новые фичи
1:33:50 Запуск самой suspend функцией нужного Dispatcher
1:36:00 Про форматирование данных с бекенда
1:37:45 Про приведение типов
1:38:30 Про многомодульную организацию network api
1:39:20 Финализирование кода, ответы на вопросы
1:40:10 Вопрос на архитектуру, MVVM+ :)
1:40:56 Про конвертацию картинок
1:41:41 Замена execute() на invoke() в UseCase
1:43:01 Про дефолтную локаль и когда пригодиться
1:43:35 Почему следует всегда поддерживать английскую локаль
1:44:28 Как оставить свой проект на разбор
1:45:00 Пока-пока