SlideShare a Scribd company logo
SOA или
Что нам стоит дом
построить?
Цыганов Станислав
@DevAlloy
2
MVCMVVM MVP
VIPER
3
MVCMVVM MVP
VIP
ER
0. Предисловие
5
Слоистая архитектура
Interface
6
Слоистая архитектура
Interface
7
Presentation
Service
Core
Service Oriented Architecture
Про что поговорим
• Что такое SOA?
• Роль сервисного слоя
• Пример SOA для простого приложения
• Преимущества SOA
8
1. Теория
SOA Framework
• Consumer Interface Layer
• Integration Layer
• Business Process Layer
• Services
• Service Components
• Operational Systems
10
UI
Interactor
Facade
Service Service
Mapper Storage
SystemModels
Сервис
• Единственная ответственность
• Абстрагируется от UI
• Реализация скрыта протоколом
• Нет зависимости сервисов от сервисов
• Отсутствие состояния
11
• Единственная ответственность
• Абстрагируется от UI
• Реализация скрыта протоколом
• Нет зависимости сервисов от сервисов
• Отсутствие состояния
Не единственная
ответственность
• Нарушена S в SOLID
• Проблема выделения новых сервисов
• Сложности поддержки и расширения
12
Не абстрагируется от UI
• Решает задачи конкретного модуля
• Сложность повторного использования
13
Реализация не скрыта
протоколом
• Нарушение слоистой архитектуры
• Открытие подробностей реализации
• Доступ к Core-компонентам
14
• В протокол выносятся необходимые ресурсы
• Множество реализаций
15
Реализация скрыта
протоколом
16
Сервисы зависят 

от сервисов
• Плохая ответственность зависимого
• "Большой" сервис недостаточно абстрактен
• Сервис решает не свою задачу
17
Нет зависимости 

сервисов от сервисов
Service
Service
18
Нет зависимости 

сервисов от сервисов
VC
Service
Service
19
Нет зависимости 

сервисов от сервисов
VC
Service Service
20
Нет зависимости 

сервисов от сервисов
VC
Interactor
Service Service
VC
21
Нет зависимости 

сервисов от сервисов
Service Service
VC
Facade
22
Нет зависимости 

сервисов от сервисов
Service Service
Наличие состояния
• Дополнительное место с состоянием
• Непредсказуемость поведения
• Часто является состоянием модуля
23
24
Отсутствие состояния
VC
Service
25
Отсутствие состояния
VC
Servicepage
26
Отсутствие состояния
VC
Service
page
27
Отсутствие состояния
VC
Service
NetworkClient Storage
28
Отсутствие состояния
VC
Service
NetworkClient Storage
cache
29
Отсутствие состояния
VC
Service
NetworkClient Storagecache
2. Практика
Пример
31
VC
AuthService NewsService
Пример
32
VC
AuthService NewsService
NetworkClient
Storage Mapper
RequestFactory
Serializer
Handler
Пример
33
VC
AuthService NewsService
NetworkClient
Storage Mapper
RequestFactory
Serializer
Handler
Protocol
Пример
34
VC
AuthService NewsService
VC
NetworkClient
Storage Mapper
RequestFactory
Serializer
Handler
Protocol
Пример
35
VC
AuthService NewsService
VC
FavService
NetworkClient
Storage Mapper
RequestFactory
Serializer
Handler
Protocol
Фабрики
36
ModuleAssembly
ServiceAssembly
CoreComponentsAssembly UtilitiesAssembly
ExtensionServiceAssembly
ModuleAssembly ModuleAssembly
Плюсы
• Инкапсуляция части логики
• Повторное использование
• Самодостаточность
• Может использоваться в разных приложениях
• Контракт
• DI
37
Подведем итоги
• SOA как архитектура
• Что такое сервис?
• Чем грозит нарушение принципов
• Плюсы и примеры SOA
38

More Related Content

Similar to Rambler.iOS #8: Сервис-ориентированная архитектура

Dependency Injection. Как сказать всё, не говоря ничего. Кожевников Дмитрий. ...
Dependency Injection. Как сказать всё, не говоря ничего. Кожевников Дмитрий. ...Dependency Injection. Как сказать всё, не говоря ничего. Кожевников Дмитрий. ...
Dependency Injection. Как сказать всё, не говоря ничего. Кожевников Дмитрий. ...
Dev2Dev
 
Inversion of Control в .NET
Inversion of Control в .NETInversion of Control в .NET
Inversion of Control в .NET
DotNetConf
 
VIPER architecture
VIPER architectureVIPER architecture
VIPER architecture
Alex Rudyak
 
Сергей Крапивенский
Сергей КрапивенскийСергей Крапивенский
Сергей Крапивенский
CodeFest
 
Чистая архитектура с VIPER / Сергей Крапивенский (Rambler&Co)
Чистая архитектура с VIPER / Сергей Крапивенский (Rambler&Co)Чистая архитектура с VIPER / Сергей Крапивенский (Rambler&Co)
Чистая архитектура с VIPER / Сергей Крапивенский (Rambler&Co)
Ontico
 
Bastion Training: Project Server 2010
Bastion Training: Project Server 2010Bastion Training: Project Server 2010
Bastion Training: Project Server 2010
slider512
 
Интеграция информационных систем с использованием OpenSource ESB
Интеграция информационных систем с использованием OpenSource ESBИнтеграция информационных систем с использованием OpenSource ESB
Интеграция информационных систем с использованием OpenSource ESB
КРОК
 
2016-08-20 02 Антон Ковалев, Антон Кормаков. Viper. Чистая архитектура для iOS
2016-08-20 02 Антон Ковалев, Антон Кормаков. Viper. Чистая архитектура для iOS2016-08-20 02 Антон Ковалев, Антон Кормаков. Viper. Чистая архитектура для iOS
2016-08-20 02 Антон Ковалев, Антон Кормаков. Viper. Чистая архитектура для iOS
Омские ИТ-субботники
 
SOA Strategy and Architecture
SOA Strategy and ArchitectureSOA Strategy and Architecture
SOA Strategy and Architecture
Dmitri Shiryaev
 
redux: the best for isomorphic apps
redux: the best for isomorphic appsredux: the best for isomorphic apps
redux: the best for isomorphic apps
Denis Izmaylov
 
"Redux: the best for isomorphic apps", Денис Измайлов, MoscowJS 25
"Redux: the best for isomorphic apps", Денис Измайлов, MoscowJS 25"Redux: the best for isomorphic apps", Денис Измайлов, MoscowJS 25
"Redux: the best for isomorphic apps", Денис Измайлов, MoscowJS 25
MoscowJS
 
Преимущества и недостатки микросервисной архитектуры в HeadHunter / Антон Ива...
Преимущества и недостатки микросервисной архитектуры в HeadHunter / Антон Ива...Преимущества и недостатки микросервисной архитектуры в HeadHunter / Антон Ива...
Преимущества и недостатки микросервисной архитектуры в HeadHunter / Антон Ива...
Ontico
 
Тимур Лукин - Архитектура и проектирование ПО
Тимур Лукин - Архитектура и проектирование ПОТимур Лукин - Архитектура и проектирование ПО
Тимур Лукин - Архитектура и проектирование ПОYandex
 
Vmware view — второй шаг к облакам
Vmware view — второй шаг к облакамVmware view — второй шаг к облакам
Vmware view — второй шаг к облакам
КРОК
 
Rambler.iOS #5: Подмодули в VIPER
Rambler.iOS #5: Подмодули в VIPERRambler.iOS #5: Подмодули в VIPER
Rambler.iOS #5: Подмодули в VIPER
RAMBLER&Co
 
Eduard Dautov (Provectus): СКОРИНГ ML МОДЕЛЕЙ В МИКРОСЕРВИСНОЙ АРХИТЕКТУРЕ
Eduard Dautov (Provectus): СКОРИНГ ML МОДЕЛЕЙ В МИКРОСЕРВИСНОЙ АРХИТЕКТУРЕ Eduard Dautov (Provectus): СКОРИНГ ML МОДЕЛЕЙ В МИКРОСЕРВИСНОЙ АРХИТЕКТУРЕ
Eduard Dautov (Provectus): СКОРИНГ ML МОДЕЛЕЙ В МИКРОСЕРВИСНОЙ АРХИТЕКТУРЕ
Provectus
 
Migration of Cloud Services to Microsoft Azure Service Fabric
Migration of Cloud Services to Microsoft Azure Service FabricMigration of Cloud Services to Microsoft Azure Service Fabric
Migration of Cloud Services to Microsoft Azure Service Fabric
GlobalLogic Ukraine
 
Что вас ждет на пути реализации Soa (Битрикс отступает)
Что вас ждет на пути реализации Soa (Битрикс отступает)Что вас ждет на пути реализации Soa (Битрикс отступает)
Что вас ждет на пути реализации Soa (Битрикс отступает)
Василий Савунов
 
разработка бизнес приложений (9)
разработка бизнес приложений (9)разработка бизнес приложений (9)
разработка бизнес приложений (9)
Alexander Gornik
 
Введение в сервис-ориентированную архитектуру
Введение в сервис-ориентированную архитектуруВведение в сервис-ориентированную архитектуру
Введение в сервис-ориентированную архитектуру
Elena Grahovac
 

Similar to Rambler.iOS #8: Сервис-ориентированная архитектура (20)

Dependency Injection. Как сказать всё, не говоря ничего. Кожевников Дмитрий. ...
Dependency Injection. Как сказать всё, не говоря ничего. Кожевников Дмитрий. ...Dependency Injection. Как сказать всё, не говоря ничего. Кожевников Дмитрий. ...
Dependency Injection. Как сказать всё, не говоря ничего. Кожевников Дмитрий. ...
 
Inversion of Control в .NET
Inversion of Control в .NETInversion of Control в .NET
Inversion of Control в .NET
 
VIPER architecture
VIPER architectureVIPER architecture
VIPER architecture
 
Сергей Крапивенский
Сергей КрапивенскийСергей Крапивенский
Сергей Крапивенский
 
Чистая архитектура с VIPER / Сергей Крапивенский (Rambler&Co)
Чистая архитектура с VIPER / Сергей Крапивенский (Rambler&Co)Чистая архитектура с VIPER / Сергей Крапивенский (Rambler&Co)
Чистая архитектура с VIPER / Сергей Крапивенский (Rambler&Co)
 
Bastion Training: Project Server 2010
Bastion Training: Project Server 2010Bastion Training: Project Server 2010
Bastion Training: Project Server 2010
 
Интеграция информационных систем с использованием OpenSource ESB
Интеграция информационных систем с использованием OpenSource ESBИнтеграция информационных систем с использованием OpenSource ESB
Интеграция информационных систем с использованием OpenSource ESB
 
2016-08-20 02 Антон Ковалев, Антон Кормаков. Viper. Чистая архитектура для iOS
2016-08-20 02 Антон Ковалев, Антон Кормаков. Viper. Чистая архитектура для iOS2016-08-20 02 Антон Ковалев, Антон Кормаков. Viper. Чистая архитектура для iOS
2016-08-20 02 Антон Ковалев, Антон Кормаков. Viper. Чистая архитектура для iOS
 
SOA Strategy and Architecture
SOA Strategy and ArchitectureSOA Strategy and Architecture
SOA Strategy and Architecture
 
redux: the best for isomorphic apps
redux: the best for isomorphic appsredux: the best for isomorphic apps
redux: the best for isomorphic apps
 
"Redux: the best for isomorphic apps", Денис Измайлов, MoscowJS 25
"Redux: the best for isomorphic apps", Денис Измайлов, MoscowJS 25"Redux: the best for isomorphic apps", Денис Измайлов, MoscowJS 25
"Redux: the best for isomorphic apps", Денис Измайлов, MoscowJS 25
 
Преимущества и недостатки микросервисной архитектуры в HeadHunter / Антон Ива...
Преимущества и недостатки микросервисной архитектуры в HeadHunter / Антон Ива...Преимущества и недостатки микросервисной архитектуры в HeadHunter / Антон Ива...
Преимущества и недостатки микросервисной архитектуры в HeadHunter / Антон Ива...
 
Тимур Лукин - Архитектура и проектирование ПО
Тимур Лукин - Архитектура и проектирование ПОТимур Лукин - Архитектура и проектирование ПО
Тимур Лукин - Архитектура и проектирование ПО
 
Vmware view — второй шаг к облакам
Vmware view — второй шаг к облакамVmware view — второй шаг к облакам
Vmware view — второй шаг к облакам
 
Rambler.iOS #5: Подмодули в VIPER
Rambler.iOS #5: Подмодули в VIPERRambler.iOS #5: Подмодули в VIPER
Rambler.iOS #5: Подмодули в VIPER
 
Eduard Dautov (Provectus): СКОРИНГ ML МОДЕЛЕЙ В МИКРОСЕРВИСНОЙ АРХИТЕКТУРЕ
Eduard Dautov (Provectus): СКОРИНГ ML МОДЕЛЕЙ В МИКРОСЕРВИСНОЙ АРХИТЕКТУРЕ Eduard Dautov (Provectus): СКОРИНГ ML МОДЕЛЕЙ В МИКРОСЕРВИСНОЙ АРХИТЕКТУРЕ
Eduard Dautov (Provectus): СКОРИНГ ML МОДЕЛЕЙ В МИКРОСЕРВИСНОЙ АРХИТЕКТУРЕ
 
Migration of Cloud Services to Microsoft Azure Service Fabric
Migration of Cloud Services to Microsoft Azure Service FabricMigration of Cloud Services to Microsoft Azure Service Fabric
Migration of Cloud Services to Microsoft Azure Service Fabric
 
Что вас ждет на пути реализации Soa (Битрикс отступает)
Что вас ждет на пути реализации Soa (Битрикс отступает)Что вас ждет на пути реализации Soa (Битрикс отступает)
Что вас ждет на пути реализации Soa (Битрикс отступает)
 
разработка бизнес приложений (9)
разработка бизнес приложений (9)разработка бизнес приложений (9)
разработка бизнес приложений (9)
 
Введение в сервис-ориентированную архитектуру
Введение в сервис-ориентированную архитектуруВведение в сервис-ориентированную архитектуру
Введение в сервис-ориентированную архитектуру
 

More from RAMBLER&Co

RDSDataSource: Основы LLVM
RDSDataSource: Основы LLVMRDSDataSource: Основы LLVM
RDSDataSource: Основы LLVM
RAMBLER&Co
 
Rambler.iOS #9: Анализируй это!
Rambler.iOS #9: Анализируй это!Rambler.iOS #9: Анализируй это!
Rambler.iOS #9: Анализируй это!
RAMBLER&Co
 
Rambler.iOS #9: Нужны ли бэкенд-разработчики, когда есть Swift?
Rambler.iOS #9: Нужны ли бэкенд-разработчики, когда есть Swift?Rambler.iOS #9: Нужны ли бэкенд-разработчики, когда есть Swift?
Rambler.iOS #9: Нужны ли бэкенд-разработчики, когда есть Swift?
RAMBLER&Co
 
Rambler.iOS #9: Life with out of memory
Rambler.iOS #9: Life with out of memoryRambler.iOS #9: Life with out of memory
Rambler.iOS #9: Life with out of memory
RAMBLER&Co
 
RDSDataSource: Чистые тесты на Swift
RDSDataSource: Чистые тесты на SwiftRDSDataSource: Чистые тесты на Swift
RDSDataSource: Чистые тесты на Swift
RAMBLER&Co
 
RDSDataSource: OCLint
RDSDataSource: OCLintRDSDataSource: OCLint
RDSDataSource: OCLint
RAMBLER&Co
 
RDSDataSource: Построение UML диаграмм
RDSDataSource: Построение UML диаграммRDSDataSource: Построение UML диаграмм
RDSDataSource: Построение UML диаграмм
RAMBLER&Co
 
RDSDataSource: App Thinning
RDSDataSource: App ThinningRDSDataSource: App Thinning
RDSDataSource: App Thinning
RAMBLER&Co
 
RDSDataSource: Мастер-класс по Dip
RDSDataSource: Мастер-класс по DipRDSDataSource: Мастер-класс по Dip
RDSDataSource: Мастер-класс по Dip
RAMBLER&Co
 
RDSDataSource: YapDatabase
RDSDataSource: YapDatabaseRDSDataSource: YapDatabase
RDSDataSource: YapDatabase
RAMBLER&Co
 
Rambler.iOS #8: Чистые unit-тесты
Rambler.iOS #8: Чистые unit-тестыRambler.iOS #8: Чистые unit-тесты
Rambler.iOS #8: Чистые unit-тесты
RAMBLER&Co
 
Rambler.iOS #8: Make your app extensible with JavaScriptCore
Rambler.iOS #8: Make your app extensible with JavaScriptCoreRambler.iOS #8: Make your app extensible with JavaScriptCore
Rambler.iOS #8: Make your app extensible with JavaScriptCore
RAMBLER&Co
 
Rambler.iOS #8: Как не стать жертвой бэкендеров
Rambler.iOS #8: Как не стать жертвой бэкендеровRambler.iOS #8: Как не стать жертвой бэкендеров
Rambler.iOS #8: Как не стать жертвой бэкендеров
RAMBLER&Co
 
RDSDataSource: iOS Reverse Engineering for inexperienced
RDSDataSource: iOS Reverse Engineering for inexperiencedRDSDataSource: iOS Reverse Engineering for inexperienced
RDSDataSource: iOS Reverse Engineering for inexperienced
RAMBLER&Co
 
RDSDataSource: Автогенерация документации для SDK
RDSDataSource: Автогенерация документации для SDKRDSDataSource: Автогенерация документации для SDK
RDSDataSource: Автогенерация документации для SDK
RAMBLER&Co
 
RDSDataSource: Плюрализация в iOS
RDSDataSource: Плюрализация в iOSRDSDataSource: Плюрализация в iOS
RDSDataSource: Плюрализация в iOS
RAMBLER&Co
 
RDSDataSource: Promises
RDSDataSource: PromisesRDSDataSource: Promises
RDSDataSource: Promises
RAMBLER&Co
 
RDSDataSource: Flux, Redux, ReSwift
RDSDataSource: Flux, Redux, ReSwiftRDSDataSource: Flux, Redux, ReSwift
RDSDataSource: Flux, Redux, ReSwift
RAMBLER&Co
 
Rambler.iOS #7: Построение сложного табличного интерфейса
Rambler.iOS #7: Построение сложного табличного интерфейсаRambler.iOS #7: Построение сложного табличного интерфейса
Rambler.iOS #7: Построение сложного табличного интерфейса
RAMBLER&Co
 
Rambler.iOS #7: Прием платежей по банковским картам в iOS приложении
Rambler.iOS #7: Прием платежей по банковским картам в iOS приложенииRambler.iOS #7: Прием платежей по банковским картам в iOS приложении
Rambler.iOS #7: Прием платежей по банковским картам в iOS приложении
RAMBLER&Co
 

More from RAMBLER&Co (20)

RDSDataSource: Основы LLVM
RDSDataSource: Основы LLVMRDSDataSource: Основы LLVM
RDSDataSource: Основы LLVM
 
Rambler.iOS #9: Анализируй это!
Rambler.iOS #9: Анализируй это!Rambler.iOS #9: Анализируй это!
Rambler.iOS #9: Анализируй это!
 
Rambler.iOS #9: Нужны ли бэкенд-разработчики, когда есть Swift?
Rambler.iOS #9: Нужны ли бэкенд-разработчики, когда есть Swift?Rambler.iOS #9: Нужны ли бэкенд-разработчики, когда есть Swift?
Rambler.iOS #9: Нужны ли бэкенд-разработчики, когда есть Swift?
 
Rambler.iOS #9: Life with out of memory
Rambler.iOS #9: Life with out of memoryRambler.iOS #9: Life with out of memory
Rambler.iOS #9: Life with out of memory
 
RDSDataSource: Чистые тесты на Swift
RDSDataSource: Чистые тесты на SwiftRDSDataSource: Чистые тесты на Swift
RDSDataSource: Чистые тесты на Swift
 
RDSDataSource: OCLint
RDSDataSource: OCLintRDSDataSource: OCLint
RDSDataSource: OCLint
 
RDSDataSource: Построение UML диаграмм
RDSDataSource: Построение UML диаграммRDSDataSource: Построение UML диаграмм
RDSDataSource: Построение UML диаграмм
 
RDSDataSource: App Thinning
RDSDataSource: App ThinningRDSDataSource: App Thinning
RDSDataSource: App Thinning
 
RDSDataSource: Мастер-класс по Dip
RDSDataSource: Мастер-класс по DipRDSDataSource: Мастер-класс по Dip
RDSDataSource: Мастер-класс по Dip
 
RDSDataSource: YapDatabase
RDSDataSource: YapDatabaseRDSDataSource: YapDatabase
RDSDataSource: YapDatabase
 
Rambler.iOS #8: Чистые unit-тесты
Rambler.iOS #8: Чистые unit-тестыRambler.iOS #8: Чистые unit-тесты
Rambler.iOS #8: Чистые unit-тесты
 
Rambler.iOS #8: Make your app extensible with JavaScriptCore
Rambler.iOS #8: Make your app extensible with JavaScriptCoreRambler.iOS #8: Make your app extensible with JavaScriptCore
Rambler.iOS #8: Make your app extensible with JavaScriptCore
 
Rambler.iOS #8: Как не стать жертвой бэкендеров
Rambler.iOS #8: Как не стать жертвой бэкендеровRambler.iOS #8: Как не стать жертвой бэкендеров
Rambler.iOS #8: Как не стать жертвой бэкендеров
 
RDSDataSource: iOS Reverse Engineering for inexperienced
RDSDataSource: iOS Reverse Engineering for inexperiencedRDSDataSource: iOS Reverse Engineering for inexperienced
RDSDataSource: iOS Reverse Engineering for inexperienced
 
RDSDataSource: Автогенерация документации для SDK
RDSDataSource: Автогенерация документации для SDKRDSDataSource: Автогенерация документации для SDK
RDSDataSource: Автогенерация документации для SDK
 
RDSDataSource: Плюрализация в iOS
RDSDataSource: Плюрализация в iOSRDSDataSource: Плюрализация в iOS
RDSDataSource: Плюрализация в iOS
 
RDSDataSource: Promises
RDSDataSource: PromisesRDSDataSource: Promises
RDSDataSource: Promises
 
RDSDataSource: Flux, Redux, ReSwift
RDSDataSource: Flux, Redux, ReSwiftRDSDataSource: Flux, Redux, ReSwift
RDSDataSource: Flux, Redux, ReSwift
 
Rambler.iOS #7: Построение сложного табличного интерфейса
Rambler.iOS #7: Построение сложного табличного интерфейсаRambler.iOS #7: Построение сложного табличного интерфейса
Rambler.iOS #7: Построение сложного табличного интерфейса
 
Rambler.iOS #7: Прием платежей по банковским картам в iOS приложении
Rambler.iOS #7: Прием платежей по банковским картам в iOS приложенииRambler.iOS #7: Прием платежей по банковским картам в iOS приложении
Rambler.iOS #7: Прием платежей по банковским картам в iOS приложении
 

Rambler.iOS #8: Сервис-ориентированная архитектура