SlideShare a Scribd company logo
1 of 19
Download to read offline
Android - думайте через
данные
Андрей Хитрый, Trinity Digital
1/19
Введение
- Множество способов построения приложения
- Различные библиотеки для работы с сетью/данными/потоками
- Нет единственно верного способа передачи данных в приложении
- Удобно ли тестировать операции над данными через UI
- Я хранил данные в json файлах и не стыжусь этого
2/19
Проектирование != Архитектура
- Очень много времени уделяется архитектуре, очень мало
проектированию
- Добавление стека Rx, не дает априори хорошей архитектуры
- Модель является основой приложения, но зачастую программисты
относятся к ней, как к вспомогательной структуре
- Данные должны быть структурированы(с этого и начнем)
3/19
Антипаттерн: TheApplication extends Application
4/19
Антипаттерн: BaseActivity/BaseFragment
- Удобно обращаться к данным (+)
- Обращения к данным находятся в одном месте(+/-)
- Дублирование методов получения, в случае обращения не из UI(-)
- Во многих случаях дописывается логика косвенно относящаяся к модели
5/19
Антипаттерн: BaseActivity/BaseFragment
6/19
Серверное API, кому оно нужно?
- Должно проектироваться ДЛЯ приложения
- Проектируется ДЛЯ пользовательского интерфейса
- Любой набор данных это объект и должен иметь идентификатор
- Мобильный разработчик проектирует приложение, учитывая серверные
данные, локальные данные и пользовательский интерфейс
7/19
Серверные данные VS Локальные данные
- Удобство разделения серверных данных от локальных может быть
иллюзорно
- Постарайтесь объединять сходные по сущности данные
- Локальными данными являются также и UX данные
- Нужно определить данные, которые мы синхронизируем через наш
сервер и те, которые мы синхронизируем при помощи Android (новые
версии API Android)
8/19
Различные хранилища данных
- Очевидно, что минимизация хранилищ, это хорошо
- Preferences -> Настройки, сами по себе являются структурой
- Восстанавливаемые данные можно хранить в кеше
- Не восстанавливаемые данные должны всегда находиться в хранилище
9/19
Поток данных или Bundle Hell
10/19
Поток данных или Bundle Hell
- Передача данных между Activity/Fragment должна быть минимизирована
- Данные не должны храниться в потоке Fragment1->Fragment2-
>Fragment3->CompleteFragment
- Все объекты должны иметь идентификатор!
- Передача только идентификатора уменьшает связность
11/19
Толстая модель: почему?
- Часть валидации данных переносится на модель
- Все операции над данными проводятся через модель, никаких прямых
запросов к базе
- За счет переноса запросов и валидации часть тестирования
выполняется только через модель или через модель и mock объект для
доступа к апи сервера
12/19
Толстая модель: запросы к серверу
- Формируем сложный запрос, как объект базы
- Получаем запрос по его идентификатору
- Ответ записываем в базу, оповещаем UI о результате
- Отложенные запросы, запросы требующие подтверждения, длительные
операции требующие запроса статуса имеют соответствующие поля в
базе
13/19
Толстая модель: простой пример
14/19
Толстая модель: логика в UI без объектов базы
15/19
Толстая модель: логика в UI без объектов базы
16/19
Запрос к серверу через модель
17/19
Преимущества
- Можно использовать с DI, Rx или использовать Observable
- Все операции над моделью со стороны сервера и клиента находятся
изолированно в классе модели
- При правильном проектировании в модель не будет добавлено много
методов
- Легко внедрить ограничения данных(через валидаторы, выброс
исключений, возврат строки с ошибкой, в зависимости от детализации)
- В UI отсутствуют преобразования данных
- Сама по себе модель заставляет на этапе проектирования больше
времени уделять полировке API 18/19
Андрей Хитрый
Trinity Digital
ak@trinitydigital.ru
19/19

More Related Content

Viewers also liked

Фвтоматизированное тестирование с чего начать Part1
Фвтоматизированное тестирование  с чего начать Part1Фвтоматизированное тестирование  с чего начать Part1
Фвтоматизированное тестирование с чего начать Part1DataArt
 
Расширение Visual studio для ASP.NET Identity
Расширение Visual studio для ASP.NET IdentityРасширение Visual studio для ASP.NET Identity
Расширение Visual studio для ASP.NET IdentityDataArt
 
"Тестирование в Agile в среде виртуализации Vagrant+Docker", Владимир Сидорен...
"Тестирование в Agile в среде виртуализации Vagrant+Docker", Владимир Сидорен..."Тестирование в Agile в среде виртуализации Vagrant+Docker", Владимир Сидорен...
"Тестирование в Agile в среде виртуализации Vagrant+Docker", Владимир Сидорен...DataArt
 
Dc brochure vietv1 (1)
Dc brochure vietv1 (1)Dc brochure vietv1 (1)
Dc brochure vietv1 (1)Nguyet Vo
 
Миша Постольный «Контрформа». Харьков.
Миша Постольный «Контрформа». Харьков. Миша Постольный «Контрформа». Харьков.
Миша Постольный «Контрформа». Харьков. DataArt
 
Fruit and vegetables
Fruit and vegetablesFruit and vegetables
Fruit and vegetablessofia84k
 
Herramientas diseño web
Herramientas diseño webHerramientas diseño web
Herramientas diseño webDiego Rojas
 
Slides coder dojoparma
Slides coder dojoparmaSlides coder dojoparma
Slides coder dojoparmaCoderdojoParma
 
Thriller advertisement posters
Thriller advertisement postersThriller advertisement posters
Thriller advertisement postersAbbey Cotterill
 
CapstonereportA4_11564841_ITC571
CapstonereportA4_11564841_ITC571CapstonereportA4_11564841_ITC571
CapstonereportA4_11564841_ITC571abhinay reddy
 
Estrategika nuevos productos proteccion
Estrategika nuevos productos proteccionEstrategika nuevos productos proteccion
Estrategika nuevos productos proteccionJUAN CARLOS CALDERON
 
Fiscalidad de internet
Fiscalidad de internetFiscalidad de internet
Fiscalidad de internetJoel Quintana
 

Viewers also liked (15)

Фвтоматизированное тестирование с чего начать Part1
Фвтоматизированное тестирование  с чего начать Part1Фвтоматизированное тестирование  с чего начать Part1
Фвтоматизированное тестирование с чего начать Part1
 
Расширение Visual studio для ASP.NET Identity
Расширение Visual studio для ASP.NET IdentityРасширение Visual studio для ASP.NET Identity
Расширение Visual studio для ASP.NET Identity
 
"Тестирование в Agile в среде виртуализации Vagrant+Docker", Владимир Сидорен...
"Тестирование в Agile в среде виртуализации Vagrant+Docker", Владимир Сидорен..."Тестирование в Agile в среде виртуализации Vagrant+Docker", Владимир Сидорен...
"Тестирование в Agile в среде виртуализации Vagrant+Docker", Владимир Сидорен...
 
Final cut pro analysis
Final cut pro analysisFinal cut pro analysis
Final cut pro analysis
 
Dc brochure vietv1 (1)
Dc brochure vietv1 (1)Dc brochure vietv1 (1)
Dc brochure vietv1 (1)
 
Миша Постольный «Контрформа». Харьков.
Миша Постольный «Контрформа». Харьков. Миша Постольный «Контрформа». Харьков.
Миша Постольный «Контрформа». Харьков.
 
Fruit and vegetables
Fruit and vegetablesFruit and vegetables
Fruit and vegetables
 
Herramientas diseño web
Herramientas diseño webHerramientas diseño web
Herramientas diseño web
 
Slides coder dojoparma
Slides coder dojoparmaSlides coder dojoparma
Slides coder dojoparma
 
Pen pc
Pen pcPen pc
Pen pc
 
Loe
LoeLoe
Loe
 
Thriller advertisement posters
Thriller advertisement postersThriller advertisement posters
Thriller advertisement posters
 
CapstonereportA4_11564841_ITC571
CapstonereportA4_11564841_ITC571CapstonereportA4_11564841_ITC571
CapstonereportA4_11564841_ITC571
 
Estrategika nuevos productos proteccion
Estrategika nuevos productos proteccionEstrategika nuevos productos proteccion
Estrategika nuevos productos proteccion
 
Fiscalidad de internet
Fiscalidad de internetFiscalidad de internet
Fiscalidad de internet
 

Similar to «Android: думайте через данные» Андрей Хитрый

Построение и переход на новую аналитическую платформу. Цели, вызовы, решения....
Построение и переход на новую аналитическую платформу. Цели, вызовы, решения....Построение и переход на новую аналитическую платформу. Цели, вызовы, решения....
Построение и переход на новую аналитическую платформу. Цели, вызовы, решения....HOWWEDOIT
 
Meet Magento Belarus - Alexander Kaigorodov
Meet Magento Belarus - Alexander KaigorodovMeet Magento Belarus - Alexander Kaigorodov
Meet Magento Belarus - Alexander KaigorodovAmasty
 
Телеметрия. Обзор технологии и сценарии ее использования
Телеметрия. Обзор технологии и сценарии ее использованияТелеметрия. Обзор технологии и сценарии ее использования
Телеметрия. Обзор технологии и сценарии ее использованияCisco Russia
 
"Пиринговый веб на JavaScript"
"Пиринговый веб на JavaScript""Пиринговый веб на JavaScript"
"Пиринговый веб на JavaScript"FDConf
 
Industrial Programming Java - Lection Pack 02 - Distributed applications - La...
Industrial Programming Java - Lection Pack 02 - Distributed applications - La...Industrial Programming Java - Lection Pack 02 - Distributed applications - La...
Industrial Programming Java - Lection Pack 02 - Distributed applications - La...Fedor Lavrentyev
 
Сергей Чистович "Подходы к кешированию на UGC-сервисе"
Сергей Чистович "Подходы к кешированию на UGC-сервисе"Сергей Чистович "Подходы к кешированию на UGC-сервисе"
Сергей Чистович "Подходы к кешированию на UGC-сервисе"Yandex
 
C# Desktop. Занятие 15.
C# Desktop. Занятие 15.C# Desktop. Занятие 15.
C# Desktop. Занятие 15.Igor Shkulipa
 
Анатомия Интернета вещей
Анатомия Интернета вещейАнатомия Интернета вещей
Анатомия Интернета вещейTibbo
 
тема 4
тема 4тема 4
тема 4asheg
 
Обзор решения по управлению оборудованием корпоративной сети
Обзор решения по управлению оборудованием корпоративной сетиОбзор решения по управлению оборудованием корпоративной сети
Обзор решения по управлению оборудованием корпоративной сетиCisco Russia
 
Тестирование трафика мобильных приложений: кейсы и инструменты
Тестирование трафика мобильных приложений: кейсы и инструментыТестирование трафика мобильных приложений: кейсы и инструменты
Тестирование трафика мобильных приложений: кейсы и инструментыOleg Nikiforov
 
Олег Никифоров "Тестирование трафика мобильных приложений: кейсы и инструменты"
Олег Никифоров "Тестирование трафика мобильных приложений: кейсы и инструменты"Олег Никифоров "Тестирование трафика мобильных приложений: кейсы и инструменты"
Олег Никифоров "Тестирование трафика мобильных приложений: кейсы и инструменты"IT Event
 
Михаил Давыдов — Транспорт, Ajax
Михаил Давыдов — Транспорт, AjaxМихаил Давыдов — Транспорт, Ajax
Михаил Давыдов — Транспорт, AjaxYandex
 
DBD lection 4. Big Data, NoSQL. In Russian.
DBD lection 4. Big Data, NoSQL. In Russian.DBD lection 4. Big Data, NoSQL. In Russian.
DBD lection 4. Big Data, NoSQL. In Russian.mikhaelsmirnov
 
Informatica for Data Warehouse Optimisation and Data Lake Use-cases
Informatica for Data Warehouse Optimisation and Data Lake Use-casesInformatica for Data Warehouse Optimisation and Data Lake Use-cases
Informatica for Data Warehouse Optimisation and Data Lake Use-casesIlya Gershanov
 
Talksum dec2013 rus_generic
Talksum dec2013 rus_genericTalksum dec2013 rus_generic
Talksum dec2013 rus_genericdartemiev
 
АрхиГраф.MDM: управление мастер-данными
АрхиГраф.MDM: управление мастер-даннымиАрхиГраф.MDM: управление мастер-данными
АрхиГраф.MDM: управление мастер-даннымиSergey Gorshkov
 

Similar to «Android: думайте через данные» Андрей Хитрый (20)

Построение и переход на новую аналитическую платформу. Цели, вызовы, решения....
Построение и переход на новую аналитическую платформу. Цели, вызовы, решения....Построение и переход на новую аналитическую платформу. Цели, вызовы, решения....
Построение и переход на новую аналитическую платформу. Цели, вызовы, решения....
 
Meet Magento Belarus - Alexander Kaigorodov
Meet Magento Belarus - Alexander KaigorodovMeet Magento Belarus - Alexander Kaigorodov
Meet Magento Belarus - Alexander Kaigorodov
 
Dapper + QueryObject
Dapper + QueryObjectDapper + QueryObject
Dapper + QueryObject
 
Телеметрия. Обзор технологии и сценарии ее использования
Телеметрия. Обзор технологии и сценарии ее использованияТелеметрия. Обзор технологии и сценарии ее использования
Телеметрия. Обзор технологии и сценарии ее использования
 
"Пиринговый веб на JavaScript"
"Пиринговый веб на JavaScript""Пиринговый веб на JavaScript"
"Пиринговый веб на JavaScript"
 
Symfony 3
Symfony 3Symfony 3
Symfony 3
 
Industrial Programming Java - Lection Pack 02 - Distributed applications - La...
Industrial Programming Java - Lection Pack 02 - Distributed applications - La...Industrial Programming Java - Lection Pack 02 - Distributed applications - La...
Industrial Programming Java - Lection Pack 02 - Distributed applications - La...
 
Сергей Чистович "Подходы к кешированию на UGC-сервисе"
Сергей Чистович "Подходы к кешированию на UGC-сервисе"Сергей Чистович "Подходы к кешированию на UGC-сервисе"
Сергей Чистович "Подходы к кешированию на UGC-сервисе"
 
C# Desktop. Занятие 15.
C# Desktop. Занятие 15.C# Desktop. Занятие 15.
C# Desktop. Занятие 15.
 
Анатомия Интернета вещей
Анатомия Интернета вещейАнатомия Интернета вещей
Анатомия Интернета вещей
 
тема 4
тема 4тема 4
тема 4
 
Обзор решения по управлению оборудованием корпоративной сети
Обзор решения по управлению оборудованием корпоративной сетиОбзор решения по управлению оборудованием корпоративной сети
Обзор решения по управлению оборудованием корпоративной сети
 
Тестирование трафика мобильных приложений: кейсы и инструменты
Тестирование трафика мобильных приложений: кейсы и инструментыТестирование трафика мобильных приложений: кейсы и инструменты
Тестирование трафика мобильных приложений: кейсы и инструменты
 
Олег Никифоров "Тестирование трафика мобильных приложений: кейсы и инструменты"
Олег Никифоров "Тестирование трафика мобильных приложений: кейсы и инструменты"Олег Никифоров "Тестирование трафика мобильных приложений: кейсы и инструменты"
Олег Никифоров "Тестирование трафика мобильных приложений: кейсы и инструменты"
 
Михаил Давыдов — Транспорт, Ajax
Михаил Давыдов — Транспорт, AjaxМихаил Давыдов — Транспорт, Ajax
Михаил Давыдов — Транспорт, Ajax
 
DBD lection 4. Big Data, NoSQL. In Russian.
DBD lection 4. Big Data, NoSQL. In Russian.DBD lection 4. Big Data, NoSQL. In Russian.
DBD lection 4. Big Data, NoSQL. In Russian.
 
Informatica for Data Warehouse Optimisation and Data Lake Use-cases
Informatica for Data Warehouse Optimisation and Data Lake Use-casesInformatica for Data Warehouse Optimisation and Data Lake Use-cases
Informatica for Data Warehouse Optimisation and Data Lake Use-cases
 
Talksum dec2013 rus_generic
Talksum dec2013 rus_genericTalksum dec2013 rus_generic
Talksum dec2013 rus_generic
 
АрхиГраф.MDM: управление мастер-данными
АрхиГраф.MDM: управление мастер-даннымиАрхиГраф.MDM: управление мастер-данными
АрхиГраф.MDM: управление мастер-данными
 
Open Data Visualization
Open Data VisualizationOpen Data Visualization
Open Data Visualization
 

More from DataArt

DataArt Custom Software Engineering with a Human Approach
DataArt Custom Software Engineering with a Human ApproachDataArt Custom Software Engineering with a Human Approach
DataArt Custom Software Engineering with a Human ApproachDataArt
 
DataArt Healthcare & Life Sciences
DataArt Healthcare & Life SciencesDataArt Healthcare & Life Sciences
DataArt Healthcare & Life SciencesDataArt
 
DataArt Financial Services and Capital Markets
DataArt Financial Services and Capital MarketsDataArt Financial Services and Capital Markets
DataArt Financial Services and Capital MarketsDataArt
 
About DataArt HR Partners
About DataArt HR PartnersAbout DataArt HR Partners
About DataArt HR PartnersDataArt
 
Event management в IT
Event management в ITEvent management в IT
Event management в ITDataArt
 
Digital Marketing from inside
Digital Marketing from insideDigital Marketing from inside
Digital Marketing from insideDataArt
 
What's new in Android, Igor Malytsky ( Google Post I|O Tour)
What's new in Android, Igor Malytsky ( Google Post I|O Tour)What's new in Android, Igor Malytsky ( Google Post I|O Tour)
What's new in Android, Igor Malytsky ( Google Post I|O Tour)DataArt
 
DevOps Workshop:Что бывает, когда DevOps приходит на проект
DevOps Workshop:Что бывает, когда DevOps приходит на проектDevOps Workshop:Что бывает, когда DevOps приходит на проект
DevOps Workshop:Что бывает, когда DevOps приходит на проектDataArt
 
IT Talk Kharkiv: «‎Soft skills в IT. Польза или вред? Максим Бастион, DataArt
IT Talk Kharkiv: «‎Soft skills в IT. Польза или вред? Максим Бастион, DataArtIT Talk Kharkiv: «‎Soft skills в IT. Польза или вред? Максим Бастион, DataArt
IT Talk Kharkiv: «‎Soft skills в IT. Польза или вред? Максим Бастион, DataArtDataArt
 
«Ноль копеек. Спастись от выгорания» — Сергей Чеботарев (Head of Design, Han...
 «Ноль копеек. Спастись от выгорания» — Сергей Чеботарев (Head of Design, Han... «Ноль копеек. Спастись от выгорания» — Сергей Чеботарев (Head of Design, Han...
«Ноль копеек. Спастись от выгорания» — Сергей Чеботарев (Head of Design, Han...DataArt
 
Communication in QA's life
Communication in QA's lifeCommunication in QA's life
Communication in QA's lifeDataArt
 
Нельзя просто так взять и договориться, или как мы работали со сложными людьми
Нельзя просто так взять и договориться, или как мы работали со сложными людьмиНельзя просто так взять и договориться, или как мы работали со сложными людьми
Нельзя просто так взять и договориться, или как мы работали со сложными людьмиDataArt
 
Знакомьтесь, DevOps
Знакомьтесь, DevOpsЗнакомьтесь, DevOps
Знакомьтесь, DevOpsDataArt
 
DevOps in real life
DevOps in real lifeDevOps in real life
DevOps in real lifeDataArt
 
Codeless: автоматизация тестирования
Codeless: автоматизация тестированияCodeless: автоматизация тестирования
Codeless: автоматизация тестированияDataArt
 
Selenoid
SelenoidSelenoid
SelenoidDataArt
 
Selenide
SelenideSelenide
SelenideDataArt
 
A. Sirota "Building an Automation Solution based on Appium"
A. Sirota "Building an Automation Solution based on Appium"A. Sirota "Building an Automation Solution based on Appium"
A. Sirota "Building an Automation Solution based on Appium"DataArt
 
Эмоциональный интеллект или как не сойти с ума в условиях сложного и динамичн...
Эмоциональный интеллект или как не сойти с ума в условиях сложного и динамичн...Эмоциональный интеллект или как не сойти с ума в условиях сложного и динамичн...
Эмоциональный интеллект или как не сойти с ума в условиях сложного и динамичн...DataArt
 
IT talk: Как я перестал бояться и полюбил TestNG
IT talk: Как я перестал бояться и полюбил TestNGIT talk: Как я перестал бояться и полюбил TestNG
IT talk: Как я перестал бояться и полюбил TestNGDataArt
 

More from DataArt (20)

DataArt Custom Software Engineering with a Human Approach
DataArt Custom Software Engineering with a Human ApproachDataArt Custom Software Engineering with a Human Approach
DataArt Custom Software Engineering with a Human Approach
 
DataArt Healthcare & Life Sciences
DataArt Healthcare & Life SciencesDataArt Healthcare & Life Sciences
DataArt Healthcare & Life Sciences
 
DataArt Financial Services and Capital Markets
DataArt Financial Services and Capital MarketsDataArt Financial Services and Capital Markets
DataArt Financial Services and Capital Markets
 
About DataArt HR Partners
About DataArt HR PartnersAbout DataArt HR Partners
About DataArt HR Partners
 
Event management в IT
Event management в ITEvent management в IT
Event management в IT
 
Digital Marketing from inside
Digital Marketing from insideDigital Marketing from inside
Digital Marketing from inside
 
What's new in Android, Igor Malytsky ( Google Post I|O Tour)
What's new in Android, Igor Malytsky ( Google Post I|O Tour)What's new in Android, Igor Malytsky ( Google Post I|O Tour)
What's new in Android, Igor Malytsky ( Google Post I|O Tour)
 
DevOps Workshop:Что бывает, когда DevOps приходит на проект
DevOps Workshop:Что бывает, когда DevOps приходит на проектDevOps Workshop:Что бывает, когда DevOps приходит на проект
DevOps Workshop:Что бывает, когда DevOps приходит на проект
 
IT Talk Kharkiv: «‎Soft skills в IT. Польза или вред? Максим Бастион, DataArt
IT Talk Kharkiv: «‎Soft skills в IT. Польза или вред? Максим Бастион, DataArtIT Talk Kharkiv: «‎Soft skills в IT. Польза или вред? Максим Бастион, DataArt
IT Talk Kharkiv: «‎Soft skills в IT. Польза или вред? Максим Бастион, DataArt
 
«Ноль копеек. Спастись от выгорания» — Сергей Чеботарев (Head of Design, Han...
 «Ноль копеек. Спастись от выгорания» — Сергей Чеботарев (Head of Design, Han... «Ноль копеек. Спастись от выгорания» — Сергей Чеботарев (Head of Design, Han...
«Ноль копеек. Спастись от выгорания» — Сергей Чеботарев (Head of Design, Han...
 
Communication in QA's life
Communication in QA's lifeCommunication in QA's life
Communication in QA's life
 
Нельзя просто так взять и договориться, или как мы работали со сложными людьми
Нельзя просто так взять и договориться, или как мы работали со сложными людьмиНельзя просто так взять и договориться, или как мы работали со сложными людьми
Нельзя просто так взять и договориться, или как мы работали со сложными людьми
 
Знакомьтесь, DevOps
Знакомьтесь, DevOpsЗнакомьтесь, DevOps
Знакомьтесь, DevOps
 
DevOps in real life
DevOps in real lifeDevOps in real life
DevOps in real life
 
Codeless: автоматизация тестирования
Codeless: автоматизация тестированияCodeless: автоматизация тестирования
Codeless: автоматизация тестирования
 
Selenoid
SelenoidSelenoid
Selenoid
 
Selenide
SelenideSelenide
Selenide
 
A. Sirota "Building an Automation Solution based on Appium"
A. Sirota "Building an Automation Solution based on Appium"A. Sirota "Building an Automation Solution based on Appium"
A. Sirota "Building an Automation Solution based on Appium"
 
Эмоциональный интеллект или как не сойти с ума в условиях сложного и динамичн...
Эмоциональный интеллект или как не сойти с ума в условиях сложного и динамичн...Эмоциональный интеллект или как не сойти с ума в условиях сложного и динамичн...
Эмоциональный интеллект или как не сойти с ума в условиях сложного и динамичн...
 
IT talk: Как я перестал бояться и полюбил TestNG
IT talk: Как я перестал бояться и полюбил TestNGIT talk: Как я перестал бояться и полюбил TestNG
IT talk: Как я перестал бояться и полюбил TestNG
 

«Android: думайте через данные» Андрей Хитрый

  • 1. Android - думайте через данные Андрей Хитрый, Trinity Digital 1/19
  • 2. Введение - Множество способов построения приложения - Различные библиотеки для работы с сетью/данными/потоками - Нет единственно верного способа передачи данных в приложении - Удобно ли тестировать операции над данными через UI - Я хранил данные в json файлах и не стыжусь этого 2/19
  • 3. Проектирование != Архитектура - Очень много времени уделяется архитектуре, очень мало проектированию - Добавление стека Rx, не дает априори хорошей архитектуры - Модель является основой приложения, но зачастую программисты относятся к ней, как к вспомогательной структуре - Данные должны быть структурированы(с этого и начнем) 3/19
  • 5. Антипаттерн: BaseActivity/BaseFragment - Удобно обращаться к данным (+) - Обращения к данным находятся в одном месте(+/-) - Дублирование методов получения, в случае обращения не из UI(-) - Во многих случаях дописывается логика косвенно относящаяся к модели 5/19
  • 7. Серверное API, кому оно нужно? - Должно проектироваться ДЛЯ приложения - Проектируется ДЛЯ пользовательского интерфейса - Любой набор данных это объект и должен иметь идентификатор - Мобильный разработчик проектирует приложение, учитывая серверные данные, локальные данные и пользовательский интерфейс 7/19
  • 8. Серверные данные VS Локальные данные - Удобство разделения серверных данных от локальных может быть иллюзорно - Постарайтесь объединять сходные по сущности данные - Локальными данными являются также и UX данные - Нужно определить данные, которые мы синхронизируем через наш сервер и те, которые мы синхронизируем при помощи Android (новые версии API Android) 8/19
  • 9. Различные хранилища данных - Очевидно, что минимизация хранилищ, это хорошо - Preferences -> Настройки, сами по себе являются структурой - Восстанавливаемые данные можно хранить в кеше - Не восстанавливаемые данные должны всегда находиться в хранилище 9/19
  • 10. Поток данных или Bundle Hell 10/19
  • 11. Поток данных или Bundle Hell - Передача данных между Activity/Fragment должна быть минимизирована - Данные не должны храниться в потоке Fragment1->Fragment2- >Fragment3->CompleteFragment - Все объекты должны иметь идентификатор! - Передача только идентификатора уменьшает связность 11/19
  • 12. Толстая модель: почему? - Часть валидации данных переносится на модель - Все операции над данными проводятся через модель, никаких прямых запросов к базе - За счет переноса запросов и валидации часть тестирования выполняется только через модель или через модель и mock объект для доступа к апи сервера 12/19
  • 13. Толстая модель: запросы к серверу - Формируем сложный запрос, как объект базы - Получаем запрос по его идентификатору - Ответ записываем в базу, оповещаем UI о результате - Отложенные запросы, запросы требующие подтверждения, длительные операции требующие запроса статуса имеют соответствующие поля в базе 13/19
  • 15. Толстая модель: логика в UI без объектов базы 15/19
  • 16. Толстая модель: логика в UI без объектов базы 16/19
  • 17. Запрос к серверу через модель 17/19
  • 18. Преимущества - Можно использовать с DI, Rx или использовать Observable - Все операции над моделью со стороны сервера и клиента находятся изолированно в классе модели - При правильном проектировании в модель не будет добавлено много методов - Легко внедрить ограничения данных(через валидаторы, выброс исключений, возврат строки с ошибкой, в зависимости от детализации) - В UI отсутствуют преобразования данных - Сама по себе модель заставляет на этапе проектирования больше времени уделять полировке API 18/19