Download - Clean architecture on Android
![Page 1: Clean architecture on Android](https://reader036.vdocuments.pub/reader036/viewer/2022062503/58cf552a1a28aba17e8b5ebf/html5/thumbnails/1.jpg)
Clean architecture on Android
Eugene Dudnik@Ciklum
![Page 2: Clean architecture on Android](https://reader036.vdocuments.pub/reader036/viewer/2022062503/58cf552a1a28aba17e8b5ebf/html5/thumbnails/2.jpg)
AgendaОжидание от архитектурыВарианты архитектуры
Различия между вариантамиClean Architecture
![Page 3: Clean architecture on Android](https://reader036.vdocuments.pub/reader036/viewer/2022062503/58cf552a1a28aba17e8b5ebf/html5/thumbnails/3.jpg)
Ожидание от архитектуры
![Page 4: Clean architecture on Android](https://reader036.vdocuments.pub/reader036/viewer/2022062503/58cf552a1a28aba17e8b5ebf/html5/thumbnails/4.jpg)
Ожидание от архитектурыПравильно выбранная архитектура должна способствовать системе соответствовать следующим свойствам:
![Page 5: Clean architecture on Android](https://reader036.vdocuments.pub/reader036/viewer/2022062503/58cf552a1a28aba17e8b5ebf/html5/thumbnails/5.jpg)
Ожидание от архитектурыПравильно выбранная архитектура должна способствовать системе соответствовать следующим свойствам:● эффективность
![Page 6: Clean architecture on Android](https://reader036.vdocuments.pub/reader036/viewer/2022062503/58cf552a1a28aba17e8b5ebf/html5/thumbnails/6.jpg)
Ожидание от архитектурыПравильно выбранная архитектура должна способствовать системе соответствовать следующим свойствам:● эффективность● гибкость (компонентность)
![Page 7: Clean architecture on Android](https://reader036.vdocuments.pub/reader036/viewer/2022062503/58cf552a1a28aba17e8b5ebf/html5/thumbnails/7.jpg)
Ожидание от архитектурыПравильно выбранная архитектура должна способствовать системе соответствовать следующим свойствам:● эффективность● гибкость (компонентность)● расширяемость
![Page 8: Clean architecture on Android](https://reader036.vdocuments.pub/reader036/viewer/2022062503/58cf552a1a28aba17e8b5ebf/html5/thumbnails/8.jpg)
Ожидание от архитектурыПравильно выбранная архитектура должна способствовать системе соответствовать следующим свойствам:● эффективность● гибкость (компонентность)● расширяемость● масштабируемость процесса разработки
![Page 9: Clean architecture on Android](https://reader036.vdocuments.pub/reader036/viewer/2022062503/58cf552a1a28aba17e8b5ebf/html5/thumbnails/9.jpg)
Ожидание от архитектурыПравильно выбранная архитектура должна способствовать системе соответствовать следующим свойствам:● эффективность● гибкость (компонентность)● расширяемость● масштабируемость процесса разработки● тестируемость
![Page 10: Clean architecture on Android](https://reader036.vdocuments.pub/reader036/viewer/2022062503/58cf552a1a28aba17e8b5ebf/html5/thumbnails/10.jpg)
Ожидание от архитектурыПравильно выбранная архитектура должна способствовать системе соответствовать следующим свойствам:● эффективность● гибкость (компонентность)● расширяемость● масштабируемость процесса разработки● тестируемость● возможность повторного использования компонентов
![Page 11: Clean architecture on Android](https://reader036.vdocuments.pub/reader036/viewer/2022062503/58cf552a1a28aba17e8b5ebf/html5/thumbnails/11.jpg)
Ожидание от архитектурыПравильно выбранная архитектура должна способствовать системе соответствовать следующим свойствам:● эффективность● гибкость (компонентность)● расширяемость● масштабируемость процесса разработки● тестируемость● возможность повторного использования компонентов● читаемость кода
![Page 12: Clean architecture on Android](https://reader036.vdocuments.pub/reader036/viewer/2022062503/58cf552a1a28aba17e8b5ebf/html5/thumbnails/12.jpg)
Ожидание от архитектуры
Серебряная пуля
![Page 13: Clean architecture on Android](https://reader036.vdocuments.pub/reader036/viewer/2022062503/58cf552a1a28aba17e8b5ebf/html5/thumbnails/13.jpg)
Ожидание от архитектуры
Серебряная пуля
БАНАН
![Page 14: Clean architecture on Android](https://reader036.vdocuments.pub/reader036/viewer/2022062503/58cf552a1a28aba17e8b5ebf/html5/thumbnails/14.jpg)
Варианты архитектуры
![Page 15: Clean architecture on Android](https://reader036.vdocuments.pub/reader036/viewer/2022062503/58cf552a1a28aba17e8b5ebf/html5/thumbnails/15.jpg)
Варианты архитектуры
● SWD(so will descend)
![Page 16: Clean architecture on Android](https://reader036.vdocuments.pub/reader036/viewer/2022062503/58cf552a1a28aba17e8b5ebf/html5/thumbnails/16.jpg)
Варианты архитектуры
● SWD(so will descend)● MVC
![Page 17: Clean architecture on Android](https://reader036.vdocuments.pub/reader036/viewer/2022062503/58cf552a1a28aba17e8b5ebf/html5/thumbnails/17.jpg)
Варианты архитектуры
● SWD(so will descend)● MVC● MVP
![Page 18: Clean architecture on Android](https://reader036.vdocuments.pub/reader036/viewer/2022062503/58cf552a1a28aba17e8b5ebf/html5/thumbnails/18.jpg)
Варианты архитектуры
● SWD(so will descend)● MVC● MVP● Clean architecture
![Page 19: Clean architecture on Android](https://reader036.vdocuments.pub/reader036/viewer/2022062503/58cf552a1a28aba17e8b5ebf/html5/thumbnails/19.jpg)
MVC
![Page 20: Clean architecture on Android](https://reader036.vdocuments.pub/reader036/viewer/2022062503/58cf552a1a28aba17e8b5ebf/html5/thumbnails/20.jpg)
MVC MVP
![Page 21: Clean architecture on Android](https://reader036.vdocuments.pub/reader036/viewer/2022062503/58cf552a1a28aba17e8b5ebf/html5/thumbnails/21.jpg)
Различия
![Page 22: Clean architecture on Android](https://reader036.vdocuments.pub/reader036/viewer/2022062503/58cf552a1a28aba17e8b5ebf/html5/thumbnails/22.jpg)
Различия
● В MVP View не имеет доступа к Model
![Page 23: Clean architecture on Android](https://reader036.vdocuments.pub/reader036/viewer/2022062503/58cf552a1a28aba17e8b5ebf/html5/thumbnails/23.jpg)
Различия
● В MVP View не имеет доступа к Model● В MVP Presenter привязан ТОЛЬКО к одной View
![Page 24: Clean architecture on Android](https://reader036.vdocuments.pub/reader036/viewer/2022062503/58cf552a1a28aba17e8b5ebf/html5/thumbnails/24.jpg)
Различия
● В MVP View не имеет доступа к Model● В MVP Presenter привязан ТОЛЬКО к одной View● В MVP View должно быть реализовано максимально пассивным
компонентом
![Page 25: Clean architecture on Android](https://reader036.vdocuments.pub/reader036/viewer/2022062503/58cf552a1a28aba17e8b5ebf/html5/thumbnails/25.jpg)
Ссылки для изучения MVP
● http://hannesdorfmann.com/mosby/getting-started/● https://code.tutsplus.com/series/how-to-adopt-model-view-present
er-on-android--cms-1012● https://github.com/googlesamples/android-architecture
![Page 26: Clean architecture on Android](https://reader036.vdocuments.pub/reader036/viewer/2022062503/58cf552a1a28aba17e8b5ebf/html5/thumbnails/26.jpg)
Clean architecture
![Page 27: Clean architecture on Android](https://reader036.vdocuments.pub/reader036/viewer/2022062503/58cf552a1a28aba17e8b5ebf/html5/thumbnails/27.jpg)
Clean architectureВыделяют 3 основных слоя:● внешний (implementation layer)● средний (interface adapter layer)● внутренний (business logic layer)
ВАЖНО (Dependency rule)Внутренние слои ничего не должны знать про внешние слои
![Page 28: Clean architecture on Android](https://reader036.vdocuments.pub/reader036/viewer/2022062503/58cf552a1a28aba17e8b5ebf/html5/thumbnails/28.jpg)
Clean architecture
Implementation layerВсе что делается средствами Android SDK (framework specific code)должно относиться к этому слою. Framework specific code должен включать каждую строчку кода, которая не относится к решению задачи приложения.ПримерыUI, Intents, Storage, Networks
![Page 29: Clean architecture on Android](https://reader036.vdocuments.pub/reader036/viewer/2022062503/58cf552a1a28aba17e8b5ebf/html5/thumbnails/29.jpg)
Clean architecture
Implementation layer● UI - Activities, Fragments, Adapters● Storage - ContentProvider, ORM● Network - Retrofit
![Page 30: Clean architecture on Android](https://reader036.vdocuments.pub/reader036/viewer/2022062503/58cf552a1a28aba17e8b5ebf/html5/thumbnails/30.jpg)
Clean architecture
Interface layerConnector между бизнес логикой приложения(business layer) и framework specific codeПримерыPresenters, Converters
![Page 31: Clean architecture on Android](https://reader036.vdocuments.pub/reader036/viewer/2022062503/58cf552a1a28aba17e8b5ebf/html5/thumbnails/31.jpg)
Clean architecture
Interface layerPresenters - events from UI(user click), serves as callback from inner layer’s(Interactors)Converters - convert models
![Page 32: Clean architecture on Android](https://reader036.vdocuments.pub/reader036/viewer/2022062503/58cf552a1a28aba17e8b5ebf/html5/thumbnails/32.jpg)
Clean architecture
Business layerВся логика, относящаяся к решению проблем должны быть в этом слое. Ничего из Android SDK в нем не должно быть. Код должен запускаться без эмулятора.ПримерыInteractors, Models, Repositories, Executors
![Page 33: Clean architecture on Android](https://reader036.vdocuments.pub/reader036/viewer/2022062503/58cf552a1a28aba17e8b5ebf/html5/thumbnails/33.jpg)
Clean architecture
Business layerInteractors - бизнес логика приложения. Выполняются в бэкграунде и возвращают эвенты во внешние слои используя callback’иModels - модели для бизнес логикиRepositories - only contains interface for database or some other outer layer implementsExecutor - this package contains code for making Interactors run in background by using working thread executor
![Page 34: Clean architecture on Android](https://reader036.vdocuments.pub/reader036/viewer/2022062503/58cf552a1a28aba17e8b5ebf/html5/thumbnails/34.jpg)
Clean architecture
Любой layer ответственен за конвертацию моделей для layer’ов нижнего уровня перед тем как они начнут использовать их.
Но нижние layer’ы не должны иметь доступа к моделям верхнего layer.
Хотя внешние layer’ы могут использовать модели из внутренних layer’ов.
![Page 35: Clean architecture on Android](https://reader036.vdocuments.pub/reader036/viewer/2022062503/58cf552a1a28aba17e8b5ebf/html5/thumbnails/35.jpg)
Ссылки для изучения
● https://medium.com/@dmilicic/a-detailed-guide-on-developing-android-apps-using-the-clean-architecture-pattern-d38d71e94029#.y5v4gcwb4
● https://github.com/dmilicic/Android-Clean-Boilerplate/tree/example● https://github.com/android10/Android-CleanArchitecture
![Page 36: Clean architecture on Android](https://reader036.vdocuments.pub/reader036/viewer/2022062503/58cf552a1a28aba17e8b5ebf/html5/thumbnails/36.jpg)
Thank youEugene DudnikTwitter : Eugene_DudnikGoogle+ : +EugeneDudnik