Как мы данные готовили ORM и все-все-все в приложении...

Preview:

Citation preview

Как мы данные готовилиORM и все-все-все в приложение Почта Mail.Ru

Кирилл ФилимоновMail.Ru Group

Что должно уметь почтовое приложение?

Что должно уметь почтовое приложение?

● Написать письмо

Что должно уметь почтовое приложение?

● Написать письмо● Отправить письмо

Что должно уметь почтовое приложение?

● Написать письмо● Отправить письмо● Получить письмо

Что должно уметь почтовое приложение?

● Написать письмо● Отправить письмо● Получить письмо● Сохранить письмо

Что должно уметь почтовое приложение?

● Написать письмо● Отправить письмо● Получить письмо● Сохранить письмо

Что должно уметь почтовое приложение?

● Написать письмо● Отправить письмо● Получить письмо● Сохранить письмА

Domain Driven Slide

Domain Driven Slide● Письмо

Domain Driven Slide● Письмо● Папка

Domain Driven Slide● Письмо● Папка● Тред

Domain Driven Slide● Письмо● Папка● Тред● Аккаунт● Фильтры● Сессия● Вложения● Реклама● Конфигурация● ...

Domain Driven Slide

Domain Driven SlideThread

Presentation

Presentation

Presentation

Message

Message

Message

Domain Driven Slide

Domain Driven Slide

Domain Driven Slide

Следствия

● Действие пользователя может порождать множество операций над данными

● Операции над данными могут зависеть друг от друга● Операции могут занимать значительное время

Что важно для пользователя

Что важно для пользователя

● Отзывчивый UI

Что важно для пользователя

● Отзывчивый UI● Видеть результат операции, даже если она не успешна

Что важно для пользователя

● Отзывчивый UI● Видеть результат операции, даже если она не успешна● Скорость выполнения операции

Инструменты

● SQLite● ORMLite● Напильник

Off-UI инструменты● Thread

Off-UI инструменты● Thread● AsyncTask

Off-UI инструменты● Thread● AsyncTask● Loader

Off-UI инструменты● Thread● AsyncTask● Loader● AsyncQueryHandler

● обработка отмены задач

Что может пойти не так

● обработка отмены задач● orientation changes

Что может пойти не так

● обработка отмены задач● orientation changes● CursorAdapter

Что может пойти не так

● обработка отмены задач● orientation changes● CursorAdapter● нотификация об изменениях

Что может пойти не так

java.lang.IllegalStateException: The content of the adapter has changed but ListView did not receive a

notification. Make sure the content of your adapter is not modified from a background thread, but only from

the UI thread.

Что выбрали мы

Операция над данными● Асинхронная операция — шаблон Command● Операция над сущностями БД:

Группа операций● Шаблон Composer

Команда для Database пула

SQLite и ORMLite: транзакции● SQLite

SQLite и ORMLite: транзакции● SQLite● ORMLite

Реализация команды с транзакцией

● Entity — базовый класс сущности● ID - тип идентификатора● тело request() будет выполнено в рамках транзакции

Доступ к результам из UI“Ближе — проще”, unknown

Доступ к результам из UI“Ближе — проще”, unknown

● закэшированы в памяти

Доступ к результам из UI“Ближе — проще”, unknown

● закэшированы в памяти● доступны из UI

DAO cache && UI cache

DAO object cache flow

Операции, обновляющие кэш:● dao.create(...)● dao.query(...)● dao.delete(...)

DAO object cache flow

Операции, НЕ обновляющие кэш:● dao.update(...)● dao.update(PreparedUpdate)

DAO object cache flow

DAO object cache flowCustomDao поддерживает обновления в ObjectCache

Взаимодействие кэшей

● тип операции● класс сущности● объект

Кэш операция

Буферизация операций

Буферизация нотификаций

● EntityManager

Получение данных из кэша

● EntityManager● getFromCache(...)

Получение данных из кэша

● EntityManager● getFromCache(...)● loadMore(...)

Получение данных из кэша

● EntityManager● getFromCache(...)● loadMore(...)● refresh(...)

Получение данных из кэша

● построение поисковых индексов в фоне● индекс строится при изменении данных в объектном кэше● передача построенного индекса в UI поток● быстрый поиск в UI

Поиск

До:● результаты > 1 сек● progress bar на экране

После:● результаты ~20 мс● дополняются серверными результами

Поиск

Контакты

mailto: k.filimonov@corp.mail.rutwitter.com/ fallfromheight

Кирилл Филимонов

Recommended