Слайд 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