Clean architecture on Android
Eugene Dudnik
@Ciklum
Agenda
Ожидание от архитектуры
Варианты архитектуры
Различия между вариантами
Clean Architecture
Ожидание от архитектуры
Ожидание от архитектуры
Правильно выбранная архитектура должна способствовать
системе соответствовать следующим свойствам:
Ожидание от архитектуры
Правильно выбранная архитектура должна способствовать
системе соответствовать следующим свойствам:
● эффективность
Ожидание от архитектуры
Правильно выбранная архитектура должна способствовать
системе соответствовать следующим свойствам:
● эффективность
● гибкость (компонентность)
Ожидание от архитектуры
Правильно выбранная архитектура должна способствовать
системе соответствовать следующим свойствам:
● эффективность
● гибкость (компонентность)
● расширяемость
Ожидание от архитектуры
Правильно выбранная архитектура должна способствовать
системе соответствовать следующим свойствам:
● эффективность
● гибкость (компонентность)
● расширяемость
● масштабируемость процесса разработки
Ожидание от архитектуры
Правильно выбранная архитектура должна способствовать
системе соответствовать следующим свойствам:
● эффективность
● гибкость (компонентность)
● расширяемость
● масштабируемость процесса разработки
● тестируемость
Ожидание от архитектуры
Правильно выбранная архитектура должна способствовать
системе соответствовать следующим свойствам:
● эффективность
● гибкость (компонентность)
● расширяемость
● масштабируемость процесса разработки
● тестируемость
● возможность повторного использования компонентов
Ожидание от архитектуры
Правильно выбранная архитектура должна способствовать
системе соответствовать следующим свойствам:
● эффективность
● гибкость (компонентность)
● расширяемость
● масштабируемость процесса разработки
● тестируемость
● возможность повторного использования компонентов
● читаемость кода
Ожидание от архитектуры
Серебряная
пуля
Ожидание от архитектуры
Серебряная
пуля
Варианты архитектуры
Варианты архитектуры
● SWD(so will descend)
Варианты архитектуры
● SWD(so will descend)
● MVC
Варианты архитектуры
● SWD(so will descend)
● MVC
● MVP
Варианты архитектуры
● SWD(so will descend)
● MVC
● MVP
● Clean architecture
MVC
MVC MVP
Различия
Различия
● В MVP View не имеет доступа к Model
Различия
● В MVP View не имеет доступа к Model
● В MVP Presenter привязан ТОЛЬКО к одной View
Различия
● В MVP View не имеет доступа к Model
● В MVP Presenter привязан ТОЛЬКО к одной View
● В MVP View должно быть реализовано максимально пассивным
компонентом
Ссылки для изучения MVP
● http://hannesdorfmann.com/mosby/getting-started/
● https://code.tutsplus.com/series/how-to-adopt-model-view-presenter-on-
android--cms-1012
● https://github.com/googlesamples/android-architecture
Clean architecture
Clean architecture
Выделяют 3 основных слоя:
● внешний (implementation layer)
● средний (interface adapter layer)
● внутренний (business logic layer)
ВАЖНО (Dependency rule)
Внутренние слои ничего не должны знать про внешние
слои
Clean architecture
Implementation layer
Все что делается средствами Android SDK (framework
specific code)должно относиться к этому слою. Framework
specific code должен включать каждую строчку кода,
которая не относится к решению задачи приложения.
Примеры
UI, Intents, Storage, Networks
Clean architecture
Implementation layer
● UI - Activities, Fragments, Adapters
● Storage - ContentProvider, ORM
● Network - Retrofit
Clean architecture
Interface layer
Connector между бизнес логикой приложения(business
layer) и framework specific code
Примеры
Presenters, Converters
Clean architecture
Interface layer
Presenters - events from UI(user click), serves as callback from
inner layer’s(Interactors)
Converters - convert models
Clean architecture
Business layer
Вся логика, относящаяся к решению проблем должны
быть в этом слое. Ничего из Android SDK в нем не должно
быть. Код должен запускаться без эмулятора.
Примеры
Interactors, Models, Repositories, Executors
Clean architecture
Business layer
Interactors - бизнес логика приложения. Выполняются в
бэкграунде и возвращают эвенты во внешние слои
используя callback’и
Models - модели для бизнес логики
Repositories - only contains interface for database or some
other outer layer implements
Executor - this package contains code for making Interactors
run in background by using working thread executor
Clean architecture
Любой layer ответственен за конвертацию моделей для
layer’ов нижнего уровня перед тем как они начнут
использовать их.
Но нижние layer’ы не должны иметь доступа к моделям
верхнего layer.
Хотя внешние layer’ы могут использовать модели из
внутренних layer’ов.
Ссылки для изучения
● 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
Thank you
Eugene Dudnik
Twitter : Eugene_Dudnik
Google+ : +EugeneDudnik

Clean architecture on Android