Видео и подкасты для разработчиков
Разбор кода приложения по доставке пиццы
Кирилл Розов разбирает код приложения по доставке пиццы.
- 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 Пока-пока
Если вы нашли опечатку - выделите ее и нажмите Ctrl + Enter! Для связи с нами вы можете использовать info@apptractor.ru.
-
Видео и подкасты для разработчиков1 месяц назад
Особенности сервиса Яндекс Про и будущее Flutter
-
Исследования1 месяц назад
Результаты опроса разработчиков Stack Overflow 2024
-
Видео и подкасты для разработчиков1 месяц назад
Вам не нужно хранилище в приложении
-
Видео и подкасты для разработчиков1 месяц назад
Нужно ли учить Java для Android-разработки в 2024