Слайд 2Как Xamarin привёл нас к Clean Architecture
Слайд 3О чём пойдёт речь
История развития архитектуры мобильного приложения и:
Xamarin
MVVM
Clean Architecture
Слайд 4Привет
Владимир Абакумов
Team Lead
Отдел мобильных решений
Мобилки для DIRECTUM and DirectumRX
Слайд 6DIRECTUM Solo
Просмотр задач и других рабочих элементов
Слайд 7DIRECTUM Solo
Просмотр задач и других рабочих элементов
Созданий задач и поручений
Слайд 8DIRECTUM Solo
Просмотр задач и других рабочих элементов
Созданий задач и поручений
Работа
с документами: просмотр, подписание и поиск
Слайд 9DIRECTUM Solo
Просмотр задач и других рабочих элементов
Созданий задач и поручений
Работа
с документами: просмотр, подписание и поиск
Слайд 10DIRECTUM Solo
Просмотр задач и других рабочих элементов
Созданий задач и поручений
Работа
с документами: просмотр, подписание и поиск
…
Слайд 142. DIRECTUM Solo
Shared code:
Network
Database
Workflow
HTTP, SQLite
Workflow
Слайд 152. DIRECTUM Solo
Shared code:
Network
Database
Workflow
Solo for iOS and Android
HTTP, SQLite
Workflow
UIVIewController
Activity, Fragment
Слайд 162. DIRECTUM Solo
Shared code:
Network;
Database;
Workflow
Solo for iOS and Android
MVC: UIViewController or
Activity
HTTP, SQLite
Workflow
UIVIewController
Activity, Fragment
Слайд 172. DIRECTUM Solo
Shared code:
Network
Database
Workflow
Solo for iOS and Android
MVC: UIViewController or
Activity
HTTP, SQLite
Workflow
UIVIewController
Activity, Fragment
Слайд 182. DIRECTUM Solo
Shared code:
Network;
Database;
Workflow
Solo for iOS and Android
MVC: UIViewController or
Activity
HTTP, SQLite
Workflow
UIVIewController
Activity, Fragment
Слайд 192. DIRECTUM Solo
Shared code:
Network
Database
Workflow
Solo for iOS and Android
MVC: UIViewController or
Activity
Общего кода < 30%
Дублирование кода, отличающееся поведение
HTTP, SQLite
Workflow
UIVIewController
Activity, Fragment
Слайд 202. DIRECTUM Solo
Shared code:
Network
Database
Workflow
Solo for iOS and Android
MVC: UIViewController or
Activity (massive viewControllers)
Общего кода < 30%
Дублирование кода, отличающееся поведение
HTTP, SQLite
Workflow
UIVIewController
Activity,
Fragment
Слайд 212. DIRECTUM Solo
Shared code:
Network
Database
Workflow
Solo for iOS and Android
MVC: UIViewController or
Activity (massive viewControllers)
Общего кода < 30%
Дублирование кода, отличающееся поведение
HTTP, SQLite
Workflow
UIVIewController
Activity,
Fragment
Слайд 243 MVVM
Humble Object
Low Coupling
Dependency Inversion
Тестируемость
Одинаковое поведение
View.iOS
View.Android
View model
Service interactors
Database
Workflow
IPlatformService
PlatformService.A
PlatformService.iOS
Слайд 253 MVVM
Humble object
Low Coupling
Dependency inversion
Liskov substitution
Testable classes
Behavior unification
View.iOS
View.Android
View model
Service
interactors
Database
Use case services
Workflow
IPlatformService
PlatformService.AX
PlatformService.iOS
Слайд 263 MVVM
Humble Object
Low Coupling
Dependency Inversion
Тестируемость
Одинаковое поведение
View.iOS
View.Android
View model
Service interactors
Database
Workflow
IPlatformService
PlatformService.A
PlatformService.iOS
Слайд 273 MVVM
Humble Object
Low Coupling
Dependency Inversion
Тестируемость
Одинаковое поведение
View.iOS
View.Android
View model
Service interactors
Database
Workflow
IPlatformService
PlatformService.A
PlatformService.iOS
Модель представления
Отображение списка
реквизитов;
Запроса на сервер;
Запрос в БД;
Агрегирование результатов;
Отображение результатов.
Single Responsibility Principle нарушается
Слайд 283 Для чего нужны принципы
«Все счастливые семьи похожи друг на
друга, каждая несчастливая семья несчастлива по-своему»
Л. Н. Толстой
Слайд 293 Для чего нужны принципы
«Все счастливые семьи похожи друг на
друга, каждая несчастливая семья несчастлива по-своему»
Л. Н. Толстой
Принцип Анны Карениной:
Здоровье
человека: температура и артериальное давление;
Архитектура ПО: следование SOLID и другим принципам чистого кода, качественной архитектуры.
Слайд 324 Clean Architecture
Document
Doc Attribute
Search use case:
Слайд 334 Clean Architecture
Document
Doc Attribute
Search use case:
Слайд 344 Clean Architecture
Document
Doc Attribute
Search use case:
Отобразить окно поиска;
Слайд 354 Clean Architecture
Document
Doc Attribute
Search use case:
Отобразить окно поиска;
Задать реквизиты поиска;
Слайд 364 Clean Architecture
Document
Doc Attribute
Search use case:
Отобразить окно поиска;
Задать реквизиты поиска;
Выполнить
поиск в локальном хранилище;
Слайд 374 Clean Architecture
Document
Doc Attribute
Search use case:
Отобразить окно поиска;
Задать реквизиты поиска;
Выполнить
поиск в локальном хранилище;
Отправить запрос на сервер и получить результат;
Слайд 384 Clean Architecture
Document
Doc Attribute
Search use case:
Отобразить окно поиска;
Задать реквизиты поиска;
Выполнить
поиск в локальном хранилище;
Отправить запрос на сервер и получить результат;
Объединить
результаты;
Слайд 394 Clean Architecture
Document
Doc Attribute
Search use case:
Отобразить окно поиска;
Задать реквизиты поиска;
Выполнить
поиск в локальном хранилище;
Отправить запрос на сервер и получить результат;
Объединить
результаты;
Отобразить результаты.
Слайд 404 Clean Architecture
Search use case
Document
Doc Attribute
Слайд 414 Clean Architecture
Search use case
DocServerInteractor
DocRepository
Doc
Search
View
Model
Navigation
Document
Doc Attribute
Слайд 424 Clean Architecture
Search use case
DocServerInteractor
DocRepository
Doc
Search
View
Model
Navigation
SQLite ORM
Network Service
Navigation
for iOS
Navigation
for Android
Document
Doc Attribute
Слайд 434 Clean Architecture
Use Cases
Server interactor
Repository
View
Model
Platform service adapter
Database
Service impl
Platform service impl
Platform
service impl
Entities
View
View
Слайд 444 Clean Architecture
Use case
Server interactor
Repository
View
Model
Platform service adapter
Database
Service impl
Platform service impl
Platform
service impl
Entity
View
View
Слайд 454 Clean Architecture
Use case
Server interactor
Repository
View
Model
Platform service adapter
Database
Service impl
Platform service impl
Platform
service impl
Entity
View
View
Изолированность компонентов
Тестируемость
Гибкость: легче изменять компоненты
Надёжность и защищенность
Удобство разработки и
сопровождения
Возможность откладывать решения на потом
Возможность уйти в пятницу пораньше, чтобы попить поиграть в футбол
Слайд 47Заключение
Xamarin: один язык и 2 платформы
SOLID
Clean Architecture
Разбиение на слабосвязанные компоненты
Компоненты
простые
Система в целом сложнее
Clean Architecture – это концепция архитектуры
Слайд 48Внимание
@anri_versen
Vladimir14Abakumov@gmail.com
Слайд 50Спасибо
за внимание
@anri_versen
Vladimir14Abakumov@gmail.com