36
Clean architecture on Android Eugene Dudnik @Ciklum

Clean architecture on Android

Embed Size (px)

Citation preview

Page 1: Clean architecture on Android

Clean architecture on Android

Eugene Dudnik@Ciklum

Page 2: Clean architecture on Android

AgendaОжидание от архитектурыВарианты архитектуры

Различия между вариантамиClean Architecture

Page 3: Clean architecture on Android

Ожидание от архитектуры

Page 4: Clean architecture on Android

Ожидание от архитектурыПравильно выбранная архитектура должна способствовать системе соответствовать следующим свойствам:

Page 5: Clean architecture on Android

Ожидание от архитектурыПравильно выбранная архитектура должна способствовать системе соответствовать следующим свойствам:● эффективность

Page 6: Clean architecture on Android

Ожидание от архитектурыПравильно выбранная архитектура должна способствовать системе соответствовать следующим свойствам:● эффективность● гибкость (компонентность)

Page 7: Clean architecture on Android

Ожидание от архитектурыПравильно выбранная архитектура должна способствовать системе соответствовать следующим свойствам:● эффективность● гибкость (компонентность)● расширяемость

Page 8: Clean architecture on Android

Ожидание от архитектурыПравильно выбранная архитектура должна способствовать системе соответствовать следующим свойствам:● эффективность● гибкость (компонентность)● расширяемость● масштабируемость процесса разработки

Page 9: Clean architecture on Android

Ожидание от архитектурыПравильно выбранная архитектура должна способствовать системе соответствовать следующим свойствам:● эффективность● гибкость (компонентность)● расширяемость● масштабируемость процесса разработки● тестируемость

Page 10: Clean architecture on Android

Ожидание от архитектурыПравильно выбранная архитектура должна способствовать системе соответствовать следующим свойствам:● эффективность● гибкость (компонентность)● расширяемость● масштабируемость процесса разработки● тестируемость● возможность повторного использования компонентов

Page 11: Clean architecture on Android

Ожидание от архитектурыПравильно выбранная архитектура должна способствовать системе соответствовать следующим свойствам:● эффективность● гибкость (компонентность)● расширяемость● масштабируемость процесса разработки● тестируемость● возможность повторного использования компонентов● читаемость кода

Page 12: Clean architecture on Android

Ожидание от архитектуры

Серебряная пуля

Page 13: Clean architecture on Android

Ожидание от архитектуры

Серебряная пуля

БАНАН

Page 14: Clean architecture on Android

Варианты архитектуры

Page 15: Clean architecture on Android

Варианты архитектуры

● SWD(so will descend)

Page 16: Clean architecture on Android

Варианты архитектуры

● SWD(so will descend)● MVC

Page 17: Clean architecture on Android

Варианты архитектуры

● SWD(so will descend)● MVC● MVP

Page 18: Clean architecture on Android

Варианты архитектуры

● SWD(so will descend)● MVC● MVP● Clean architecture

Page 19: Clean architecture on Android

MVC

Page 20: Clean architecture on Android

MVC MVP

Page 21: Clean architecture on Android

Различия

Page 22: Clean architecture on Android

Различия

● В MVP View не имеет доступа к Model

Page 23: Clean architecture on Android

Различия

● В MVP View не имеет доступа к Model● В MVP Presenter привязан ТОЛЬКО к одной View

Page 24: Clean architecture on Android

Различия

● В MVP View не имеет доступа к Model● В MVP Presenter привязан ТОЛЬКО к одной View● В MVP View должно быть реализовано максимально пассивным

компонентом

Page 25: Clean architecture on Android

Ссылки для изучения 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

Clean architecture

Page 27: Clean architecture on Android

Clean architectureВыделяют 3 основных слоя:● внешний (implementation layer)● средний (interface adapter layer)● внутренний (business logic layer)

ВАЖНО (Dependency rule)Внутренние слои ничего не должны знать про внешние слои

Page 28: Clean architecture on Android

Clean architecture

Implementation layerВсе что делается средствами Android SDK (framework specific code)должно относиться к этому слою. Framework specific code должен включать каждую строчку кода, которая не относится к решению задачи приложения.ПримерыUI, Intents, Storage, Networks

Page 29: Clean architecture on Android

Clean architecture

Implementation layer● UI - Activities, Fragments, Adapters● Storage - ContentProvider, ORM● Network - Retrofit

Page 30: Clean architecture on Android

Clean architecture

Interface layerConnector между бизнес логикой приложения(business layer) и framework specific codeПримерыPresenters, Converters

Page 31: Clean architecture on Android

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

Clean architecture

Business layerВся логика, относящаяся к решению проблем должны быть в этом слое. Ничего из Android SDK в нем не должно быть. Код должен запускаться без эмулятора.ПримерыInteractors, Models, Repositories, Executors

Page 33: Clean architecture on Android

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

Clean architecture

Любой layer ответственен за конвертацию моделей для layer’ов нижнего уровня перед тем как они начнут использовать их.

Но нижние layer’ы не должны иметь доступа к моделям верхнего layer.

Хотя внешние layer’ы могут использовать модели из внутренних layer’ов.

Page 35: Clean architecture on Android

Ссылки для изучения

● 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

Thank youEugene DudnikTwitter : Eugene_DudnikGoogle+ : +EugeneDudnik