Клиент-серверные приложения

Содержание

Слайд 2

Введение в курс

Введение в курс

Слайд 3

Цели курса

Изучить вопросы и проблемы, связанные с разработкой клиент-серверных приложений
Изучить наиболее действенные

Цели курса Изучить вопросы и проблемы, связанные с разработкой клиент-серверных приложений Изучить
и популярные методы построения архитектуры приложений, а также научиться применять их на практике

Слайд 4

Формат курса

Занятие – 2-2,5 часа
Лекция – 60-80 минут
Практика – 40-60 минут
Дополнительная лекция

Формат курса Занятие – 2-2,5 часа Лекция – 60-80 минут Практика –
– 15-20 минут
Командная работа над финальным проектом

Слайд 5

Рассматриваемые темы

Обработка смены конфигурации в Activity
Классические паттерны A/B/C для обеспечения клиент-серверного взаимодействия
Фреймворк

Рассматриваемые темы Обработка смены конфигурации в Activity Классические паттерны A/B/C для обеспечения
RxJava и его применение в Android-разработке
Принципы Clean Architecture и их применение в построении архитектуры приложений

Слайд 6

Рассматриваемые темы

Паттерн MVP
Unit-тестирование Android-приложений
UI-тестирование Android-приложений
Фреймворк DataBinding и его использование

Рассматриваемые темы Паттерн MVP Unit-тестирование Android-приложений UI-тестирование Android-приложений Фреймворк DataBinding и его использование в паттерне MVVM
в паттерне MVVM

Слайд 7

Дополнительные темы

Проблема Backpressure в RxJava и способы ее решения
Библиотека Google Agera для

Дополнительные темы Проблема Backpressure в RxJava и способы ее решения Библиотека Google
построения архитектуры приложений
Библиотека Mosby для построения архитектуры приложений
Методология TDD (test-driven development)
Dagger 2 как библиотека для реализации принципа Dependency Injection

Слайд 8

Командный проект

После 5-ого занятия
Команды по 3 человека
Выбор идеи проекта https://github.com/toddmotto/public-apis
Планирование задач

Командный проект После 5-ого занятия Команды по 3 человека Выбор идеи проекта
по проекту
Реализация проекта в команде, работа в Github

Слайд 9

Введение в архитектуру клиент-серверных приложений

Введение в архитектуру клиент-серверных приложений

Слайд 10

Зачем?

От создателей “и так сойдет”

Зачем? От создателей “и так сойдет”

Слайд 11

2007 2008

2007 2008

Слайд 12

Так все же почему?

Крайне тяжело поддерживать
Невозможно писать Unit-тесты

Так все же почему? Крайне тяжело поддерживать Невозможно писать Unit-тесты

Слайд 13

MVC как AAA (Activity, Activity, Activity)

MVC как AAA (Activity, Activity, Activity)

Слайд 14

2014 - пора улучшить ситуацию

Концепция Material Design на конференции Google I/O

2014 - пора улучшить ситуацию Концепция Material Design на конференции Google I/O

Слайд 15

Fernando Cejas

2) Architecting Android...The clean way?
http://fernandocejas.com/2014/09/03/architecting-android-the-clean-way/

Fernando Cejas 2) Architecting Android...The clean way? http://fernandocejas.com/2014/09/03/architecting-android-the-clean-way/

Слайд 16

Хорошая архитектура

Поддерживаемая, удобная, расширяемая и много других красивых прилагательных
Позволяет написание тестов

Хорошая архитектура Поддерживаемая, удобная, расширяемая и много других красивых прилагательных Позволяет написание тестов

Слайд 17

Много красивых прилагательных

Модульность
Четкое именование
Короткие функции и классы
WTF / min -> 0

Много красивых прилагательных Модульность Четкое именование Короткие функции и классы WTF / min -> 0

Слайд 18

Тестирование

Unit-тесты для бизнес-логики
Минимум зависимостей от Android-классов в тестируемых модулях
+ Интеграционные тесты

Тестирование Unit-тесты для бизнес-логики Минимум зависимостей от Android-классов в тестируемых модулях + Интеграционные тесты

Слайд 19

Основные задачи при разработке клиент-серверных приложений

Основные задачи при разработке клиент-серверных приложений

Слайд 20

Клиент-серверные приложения

Организация клиент-серверного взаимодействия
Обеспечение возможности тестирования классов, содержащих бизнес-логику приложения

Это и есть

Клиент-серверные приложения Организация клиент-серверного взаимодействия Обеспечение возможности тестирования классов, содержащих бизнес-логику приложения
основные задачи, которые мы будем изучать в ходе курса

Слайд 21

Клиент-серверное взаимодействие

Обработка ошибок
Управление множеством запросов
Корректное управление закрытием приложения

Клиент-серверное взаимодействие Обработка ошибок Управление множеством запросов Корректное управление закрытием приложения

Слайд 22

Обеспечение возможности тестирования

Модульность классов
Минимальное число зависимостей от классов Android
Dependency Injection

Обеспечение возможности тестирования Модульность классов Минимальное число зависимостей от классов Android Dependency Injection

Слайд 23

Обработка смены конфигурации

Обработка смены конфигурации

Слайд 24

Проблемы

Все поля в Activity уничтожаются при пересоздании Activity – нужно уметь восстанавливать

Проблемы Все поля в Activity уничтожаются при пересоздании Activity – нужно уметь
их
Нельзя повторно выполнять запросы и другие “тяжелые” задачи

Слайд 25

Запрет на смену ориентации

Поддержка только одной ориентации в приложении часто сказывается не

Запрет на смену ориентации Поддержка только одной ориентации в приложении часто сказывается
лучшим образом на UX
Не покрывает всех ситуаций, при которых Activity пересоздается

Слайд 26

Ручная обработка смены конфигурации

Ручная обработка смены конфигурации

Слайд 27

Ручная обработка смены конфигурации

Система автоматически не меняет ресурсы (например, языковые ресурсы или

Ручная обработка смены конфигурации Система автоматически не меняет ресурсы (например, языковые ресурсы
ресурсы, зависящие от ориентации устройства)

Слайд 28

Сохранение состояния в Bundle

Сохранение состояния в Bundle

Слайд 29

Сохранение состояния в Bundle

Сохранение состояния в Bundle

Слайд 30

Сохранение состояния в Bundle

Нельзя сохранять большие данные
Вносит дополнительную непростую логику

Сохранение состояния в Bundle Нельзя сохранять большие данные Вносит дополнительную непростую логику

Слайд 31

Retain Fragment

Retain Fragment

Слайд 32

Retain Fragment

Retain Fragment

Слайд 33

Retain Fragment

Retain Fragment

Слайд 34

Retain Fragment

Нужна аккуратность в использовании ссылок на Activity / Context
При закрытии приложения

Retain Fragment Нужна аккуратность в использовании ссылок на Activity / Context При закрытии приложения уничтожается
уничтожается

Слайд 35

Loader

Класс для загрузки данных
Переживает пересоздание Activity
Управляется специальным классом LoaderManager

Loader Класс для загрузки данных Переживает пересоздание Activity Управляется специальным классом LoaderManager

Слайд 37

LoaderManager

public abstract Loader initLoader(int id, Bundle args, LoaderManager.LoaderCallbacks callback);
public abstract

LoaderManager public abstract Loader initLoader(int id, Bundle args, LoaderManager.LoaderCallbacks callback); public abstract
Loader restartLoader(int id, Bundle args, LoaderManager.LoaderCallbacks callback);

Слайд 38

LoaderManager.LoaderCallbacks

public interface LoaderCallbacks {
public Loader onCreateLoader(int id, Bundle args);
public void

LoaderManager.LoaderCallbacks public interface LoaderCallbacks { public Loader onCreateLoader(int id, Bundle args); public
onLoadFinished(Loader loader, D data);
public void onLoaderReset(Loader loader);
}

Слайд 39

LoaderManager.LoaderCallbacks

LoaderManager.LoaderCallbacks

Слайд 40

Запускаем работу лоадера

Запускаем работу лоадера

Слайд 41

LoaderManager

public abstract Loader initLoader(int id, Bundle args, LoaderManager.LoaderCallbacks callback);
public abstract

LoaderManager public abstract Loader initLoader(int id, Bundle args, LoaderManager.LoaderCallbacks callback); public abstract
Loader restartLoader(int id, Bundle args, LoaderManager.LoaderCallbacks callback);

Слайд 42

Загружаем данные в лоадере

Загружаем данные в лоадере

Слайд 44

Loader

protected void onStartLoading() {
}
protected void onForceLoad() {
}
protected void onStopLoading() {
}

Loader protected void onStartLoading() { } protected void onForceLoad() { } protected void onStopLoading() { }

Слайд 45

Создаем свой лоадер

Создаем свой лоадер

Слайд 46

Создаем свой лоадер

Создаем свой лоадер

Слайд 47

Загружаем данные

Загружаем данные

Слайд 48

Создаем свой лоадер

Создаем свой лоадер

Слайд 49

Loader

При закрытии приложения уничтожается
Неудобно обрабатывать ошибки
Много кода

Больше примеров в статье

Loader При закрытии приложения уничтожается Неудобно обрабатывать ошибки Много кода Больше примеров в статье

Слайд 50

Практика

Практика

Слайд 51

Погода в нескольких городах

Проект LoaderWeather. Описание задачи в файле ru.gdgkazan.simpleweather.screen.weatherlist.WeatherListActivity
Нужно загрузить погоду

Погода в нескольких городах Проект LoaderWeather. Описание задачи в файле ru.gdgkazan.simpleweather.screen.weatherlist.WeatherListActivity Нужно
во всех городах при старте приложения
Сделать это наиболее быстрым способом (не каждый город последовательно)
Возможность обновления через SwipeRefreshLayout
Обработка пересоздания Activity
Имя файла: Клиент-серверные-приложения.pptx
Количество просмотров: 73
Количество скачиваний: 1